如何从副本中批量排除一些也匹配指定通配符的文件

How to exclude some files from copy that also match specified wildcard in batch

我对批处理不是很有经验。我有一些这样的文件:

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-*-a 文件复制到 \folderA,将所有 foo-*-b-a 文件夹复制到 \folderBA。复制在 folderBA 上正常工作。但是,当我在 folderA:

上使用复制时

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

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

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

然后 iffindstr 设置的 errorlevel 进行操作。

尝试使用 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"

这个怎么样:将所有 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\"