如何从副本中批量排除一些也匹配指定通配符的文件
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
然后 if
对 findstr
设置的 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\"
我对批处理不是很有经验。我有一些这样的文件:
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
然后 if
对 findstr
设置的 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\"