フォルダAからフォルダBにファイルをコピーするコマンドラインがあります。
copy A\* B\
ここで、Aに存在するBのすべてのファイルを非再帰的に削除したいと思います。私はこのようにAのファイルをリストすることができます:
dir /b /a-d A
出力は次のとおりです。
f0.txt
f1.txt
f2.txt
これが私がやりたいことの擬似コードです:
foreach $1 in <dir /b /a-d A output>:
del B\$1
別のコマンドの出力を入力として使用して、コマンドを実行するWindowsコマンドライン構文はありますか?私は配管演算子(|)を知っていますが、これを使用してこのタスクを実行する方法を知りません。どんな助けでもいただければ幸いです。
制約事項:Windows7でデフォルトで使用できるコマンドのみ。
次のファイルを反復処理できます
for %x in (*) do ...
これは、このユースケースのコマンドの出力を反復しようとするよりもはるかに堅牢です。
そう
for %f in (A\*) do del "B\%~nxf"
または、コマンドラインではなくバッチファイルでこれが必要な場合:
for %%f in (A\*) do del "B\%%~nxf"
%~nxf
は各ファイルのファイル名と拡張子のみを返します。これはプレフィックスがA\
であり、Bで削除するためです。
> nul 2>&1
を追加して、出力を抑制します(存在しないファイルを削除しようとするとエラーメッセージが表示される場合があります)。
完全を期すために、実際には、ほぼ同じ方法でコマンドの出力を繰り返すことができます。
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) }