Ada*_*m S 12 windows command-line windows-7
我有一个命令行,它将文件夹从文件夹A复制到文件夹B:
copy A\* B\
Run Code Online (Sandbox Code Playgroud)
我现在想删除B中存在于A中的所有文件,非递归.我可以像这样列出A中的文件:
dir /b /a-d A
Run Code Online (Sandbox Code Playgroud)
输出为:
f0.txt
f1.txt
f2.txt
Run Code Online (Sandbox Code Playgroud)
这是我想要做的伪代码:
foreach $1 in <dir /b /a-d A output>:
del B\$1
Run Code Online (Sandbox Code Playgroud)
是否有一个Windows命令行语法将执行命令,使用另一个命令的输出作为输入?我知道管道操作符(|),但不知道这可以用来完成这个任务的方式.任何帮助将是欣赏.
限制:仅Windows 7中的命令可用.
Joe*_*oey 16
您可以使用迭代文件
for %x in (*) do ...
Run Code Online (Sandbox Code Playgroud)
这比尝试迭代这个用例的命令输出要强大得多.
所以
for %f in (A\*) do del "B\%~nxf"
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要在批处理文件而不是命令行中:
for %%f in (A\*) do del "B\%%~nxf"
Run Code Online (Sandbox Code Playgroud)
%~nxf只返回每个文件的文件名和扩展名,因为它将以前缀为例,A\你想在B中删除它.
添加> nul 2>&1以禁止任何输出(当您尝试删除不存在的文件时可能会出现错误消息).
为了完整起见,您实际上可以以几乎相同的方式迭代命令的输出:
for /f %x in ('some command') do ...
Run Code Online (Sandbox Code Playgroud)
但这样做有几个问题,在迭代dir输出的情况下很少需要,因此我不推荐它.
由于您使用的是Windows 7,因此您也可以使用PowerShell:
Get-ChildItem A\* | ForEach-Object { Remove-Item ('B\' + $_.Name) }
Run Code Online (Sandbox Code Playgroud)
或更短:
ls A\* | % { rm B\$($_.Name) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23579 次 |
| 最近记录: |