Windowsコマンドプロンプトでのforfilesコマンドを使います。
forfilesは、指定したパスの各ファイルをパラメータとして指定コマンドを実行するコマンドです。まあUnix/Linuxのfindと同じようなことがやれます。
※Windowsにもfindという名前のコマンドがありますが、こちらは別の意味(テキスト検索)のコマンドです。
では使ってみましょう。現在のディレクトリ構成はこのようになっています。
C:\Users\takk\aaa> tree フォルダー パスの一覧 ボリューム シリアル番号は 0000000C C288:F709 です C:. ├─145 │ └─622 │ └─134 │ └─0 ├─180 │ └─229 │ └─579 │ └─7 ├─209 │ └─890 │ └─176 │ └─6 ├─267 │ └─683 │ └─995 └─905 └─744 └─892
では、forfilesを パラメータなしで実行。
C:\Users\takk\aaa> forfiles "145" "180" "209" "267" "905" C:\Users\takk\aaa>
サブディレクトリを再帰的に処理するには、/sオプションをつけます。
PS C:\Users\takk\aaa> forfiles /s "145" "180" "209" "267" "905" "622" "134" "0" "file.txt" "229" "579" "7" "file.txt" "890" "176" "6" "file.txt" "683" "995" "file.txt" "744" "892" "file.txt" C:\Users\takk\aaa>
ファイル名だけでは分かり難いですね。フルパスの一覧にしてみましょう。
C:\Users\takk\aaa> forfiles /s /c "cmd /c echo @path" "C:\Users\takk\aaa\145" "C:\Users\takk\aaa\180" "C:\Users\takk\aaa\209" "C:\Users\takk\aaa\267" "C:\Users\takk\aaa\905" "C:\Users\takk\aaa\145\622" "C:\Users\takk\aaa\145\622\134" "C:\Users\takk\aaa\145\622\134\0" "C:\Users\takk\aaa\145\622\134\0\file.txt" "C:\Users\takk\aaa\180\229" "C:\Users\takk\aaa\180\229\579" "C:\Users\takk\aaa\180\229\579\7" "C:\Users\takk\aaa\180\229\579\7\file.txt" "C:\Users\takk\aaa\209\890" "C:\Users\takk\aaa\209\890\176" "C:\Users\takk\aaa\209\890\176\6" "C:\Users\takk\aaa\209\890\176\6\file.txt" "C:\Users\takk\aaa\267\683" "C:\Users\takk\aaa\267\683\995" "C:\Users\takk\aaa\267\683\995\file.txt" "C:\Users\takk\aaa\905\744" "C:\Users\takk\aaa\905\744\892" "C:\Users\takk\aaa\905\744\892\file.txt" C:\Users\takk\aaa>
面倒なのですが、echoコマンドは、cmdの内部コマンドなので、cmd /c echoで実行しなければなりません。
ファイルのみを一覧する場合。
C:\Users\takk\aaa>forfiles /s /c "cmd /c if @isdir==FALSE echo @path" "C:\Users\takk\aaa\145\622\134\0\file.txt" "C:\Users\takk\aaa\180\229\579\7\file.txt" "C:\Users\takk\aaa\209\890\176\6\file.txt" "C:\Users\takk\aaa\267\683\995\file.txt" "C:\Users\takk\aaa\905\744\892\file.txt" C:\Users\takk\aaa>
コメント