web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイル(可能な場合はサブディレクトリも含む)でコマンドを実行するコマンドラインループ

これはかなり簡単にできると思いますが、Windowsのコマンドラインユーティリティの経験はありません。基本的に、ディレクトリ内のすべてのファイルを反復処理する必要があります(サブディレクトリを実行できる場合は素晴らしいですが、必要に応じて5つのディレクトリのそれぞれで実行できます)。名前を変数として取得し、実行する必要があります。

"C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
   -colorspace Gray -colors 32 file_var file_var

私は コマンドプロンプトのループでファイルに動的に名前を付ける を見ました。それを使用できますか(上記のコマンドでSET ...をスワップします)?問題のコンピューターのスペースが制限を超えているため、この段階でこれを実行する前にバックアップを実行することはできません(悪いことはわかっています)。

15
Robert

奇妙なことに、再帰的な部分を持つ応答がありました。

まあ、 バッチファイルのワイルドカードに一致するファイルをループする方法 ごとに、これを達成することができました。実行方法は次のとおりです。

 cd path_to_root
 for /R %%f in (*.tif) do (
 "C:\Program Files\ImageMagick-6.7.6-Q16\convert.exe" -compress LZW 
    -colorspace Gray -colors 32 "%%f" "%%f"
 )
14
Robert

PowerShellを開く

$files = Get-ChildItem -Recurse 
foreach ($file in $files){
    c:\windows\System32\notepad.exe $file.FullName
}

Get-ChildItemは、ファイルのリストをオブジェクトとして現在のサブディレクトリから取得します。 「-recurse」にはサブディレクトリが含まれます。これにより、配列$ Filesに配置されます。

Foreachループは各ファイルを循環し、各ファイルへの完全なファイル名パスのコマンドライン引数を使用してメモ帳を呼び出します。

注意:ファイルごとにメモ帳のインスタンスを開くため、上記のコードをいくつかの小さなテキストファイルのあるディレクトリでテストします。

これは、あなたが何をしようとしているのかについて、どうやって進むべきかについてのアイデアをあなたに与えるはずです。

5
Bye