如何从复制中排除某些文件,这些文件也与批处理中的指定通配符匹配

时间:2017-01-07 22:11:04

标签: batch-file filesystems copy-paste

我在批次方面不是很有经验。我有一些看起来像这样的文件:

foo-spoon-a.bar
foo-spoon-b-a.bar
foo-fork-a.bar
foo-fork-b-a.bar
foo-knife-a.bar
foo-knife-b-a.bar

我想将每个foo - * - 一个文件复制到\folderA,将所有foo - * - b - 一个文件夹复制到\folderBA。复制在folderBA上正常工作。但是,当我在folderA上使用副本时:

for /R "original_folder" %%f in ("foo-*-a.bar") do copy /Y %%f "folderA"

程序会复制a文件,但它也会复制b-a文件,因为它们仍然与通配符匹配。有没有办法一次复制所有文件并将其中一半粘贴在一个文件夹中,另一半粘贴在另一个文件夹中?或者复制一半文件,然后复制其他尚未复制的文件?什么是最简单的解决方案最少的代码

3 个答案:

答案 0 :(得分:2)

for /R "original_folder" %%f in ("foo-*-a.bar") do echo "%%~nxf"|findstr /L /I "-b-a" >nul& if errorlevel 1 (copy /Y %%f "folderB") else (copy /Y %%f "folderA")

建议您首先尝试对付虚拟文件集,将copy替换为echo(copy以显示而不是实际复制文件。

方法:将文件的名称和扩展名回显到findstr,然后/L字面上/i不区分大小写地找到字符串-b-a。如果找到该字符串,则errorlevel变为0,否则变为1

然后iferrorlevel设置的findstr进行操作。

答案 1 :(得分:2)

尝试使用findstr或find进行过滤(这将需要for /f

  for /f "tokens=* delims=" %%f in ('dir /b /s "original_folder\foo-*-a.bar" ^| find /i /v "-b-a.bar"') do copy /Y %%f "folderA"

答案 2 :(得分:0)

如何:将所有foo-*-a.bar个文件复制到folderA,然后将所有foo-*-b-a.bar个文件从folderA移至folderBA(请记住,移动速度很快实际上没有移动数据?

for /R "original_folder" %%f in ("foo-*-a.bar") do copy /Y "%%~f" "folderA\"
for /R "folderA" %%f in ("foo-*-b-a.bar") do move /Y "%%~f" "folderBA\"