Windowsプロンプトでfind(forfiles)

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>

コメント

タイトルとURLをコピーしました