2012-01-28 11 views
10

私は、フォルダAからフォルダBにどのファイルをコピーするコマンドラインがあります。WindowsのコマンドラインでForeachループを実行しますか?

copy A\* B\ 

を私は今、非再帰的に、Aに存在するB内のすべてのファイルを削除したいと思います。出力された状態で

dir /b /a-d A 

:私はこのようにファイルを一覧表示することができます。ここ

f0.txt 
f1.txt 
f2.txt 

は私がやりたい何のための擬似コードです:

foreach $1 in <dir /b /a-d A output>: 
    del B\$1 

があります別のコマンドの出力を入力として使用してコマンドを実行するWindowsコマンドライン構文?私は配管オペレータ(|)を認識していますが、この作業を達成するために使用できる方法はわかりません。どんな助けでも感謝します。

制限事項:Windowsのみ7ではデフォルトで使用可能なコマンド

答えて

12

あなたはまた、より多くの強固なため、コマンドの出力を反復処理しようとするよりも

for %x in (*) do ... 

を持つファイルを反復処理することができますこのユースケース。

ので

for %f in (A\*) do del "B\%~nxf" 

または、あなたが代わりにコマンドラインのバッチファイルでこれを必要とする場合:それはなりますので、

for %%f in (A\*) do del "B\%%~nxf" 

%~nxfリターンのみのファイル名と、各ファイルの拡張子接頭辞はA\で、削除する場合は

> nul 2>&1を追加して出力を抑制します(エラーメッセージはyo存在しないファイルを削除しようとします)。


ただ、完全性について

、あなたが実際には、ほぼ同じようにコマンドの出力を反復処理することができます。

for /f %x in ('some command') do ... 

が、これを行うこととし、繰り返し処理の場合、いくつかの問題がありますdir出力はめったに必要ありませんので、お勧めしません。


そして、あなたは、Windows 7上なので、あなたにもPowerShellを持っている:

Get-ChildItem A\* | ForEach-Object { Remove-Item ('B\' + $_.Name) } 

または短い:

ls A\* | % { rm B\$($_.Name) } 
+1

あなたがたときにエラーを回避するために、 '-ErrorAction Silentlycontinue'を追加することができますAの中のいくつかのファイルがBに存在しない – mjsr

関連する問題