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>



コメント