我在批次方面不是很有经验。我有一些看起来像这样的文件:
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文件,因为它们仍然与通配符匹配。有没有办法一次复制所有文件并将其中一半粘贴在一个文件夹中,另一半粘贴在另一个文件夹中?或者复制一半文件,然后复制其他尚未复制的文件?什么是最简单的解决方案最少的代码?
答案 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
然后if
对errorlevel
设置的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\"