it-swarm-ja.com

バッチファイル内のすべてのサブフォルダーでコマンドを実行します

次のようなバッチファイルがあります。

IF EXIST icon.ico (
    attrib -S -H -R desktop.ini
    echo f | xcopy /H /Y "%~dp0desktop.ini.txt" desktop.ini
    attrib +S +H +A desktop.ini
)

これは私のニーズに完全に対応しています。私の質問は、これをすべてのサブフォルダーで実行するにはどうすればよいですか?

2
SportySpice

バッチファイルのすべてのサブディレクトリでコマンドを実行するにはどうすればよいですか?

これには_for /r_を使用できます。

次のバッチファイルを使用します。

_for /r "starting_directory" %%a in (.) do (
  pushd %%a
  if exist icon.ico (
    attrib -s -h -r desktop.ini
    echo f | xcopy /h /y "%~dp0desktop.ini.txt" desktop.ini
    attrib +s +h +a desktop.ini
    ) 
  popd 
  )
_

for/r-ファイルをループします(Recurseサブフォルダー)

構文

FOR /R [[drive:]path] %%parameter IN (set) DO command

キー

_drive:path_:ファイルが配置されているフォルダツリー。

set:1つ以上のファイルのセット。ワイルドカードを使用する必要があります。 (set)がピリオド文字(。)の場合、FORはすべてのフォルダーをループします。

command:コマンドラインパラメータを含む、実行するコマンド。

%% parameter`:置換可能なパラメータ:バッチファイルで%% Gを使用します(コマンドライン%Gで)

ソース / rの場合 -ファイルをループします(サブフォルダーを繰り返します)。


参考文献

4
DavidPostill