我有一个命令行将文件夹A中的文件复制到文件夹B:
copy A\* B\
现在我想以非recursion方式删除B中存在于A中的所有文件。 我可以像这样列出A中的文件:
dir /b /ad A
输出是:
f0.txt f1.txt f2.txt
这是我想要做的伪代码:
foreach $1 in <dir /b /ad A output>: del B\$1
是否有一个Windows命令行语法将执行一个命令,使用另一个命令的输出作为input? 我知道pipe道操作员(|),但不知道这可以用来完成这项任务的方式。 任何帮助将不胜感激。
限制:只有在Windows 7中默认可用的命令。
你可以用文件遍历文件
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) }