我在使用白名单文本
将某些文件复制到另一个文件夹时遇到问题在folder1中,我有1.txt,2.txt,3.txt 我需要将oni 1.txt和3.txt复制到folder2
在我的whitelist.txt中,我有一个“c:\ folder1 \ 1.txt”和“c:\ folder1 \ 3.txt”
如何使用批处理脚本来复制此问题?谢谢
答案 0 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=* usebackq" %%f in ("c:\wherever\whitelist.txt") do (
copy "%%~f" "c:\folder2"
)
对于指定文件中的每一行,将行读入变量%%f
(您的文件),并将指定文件的副本执行到folder2(%%~f
是未加引号的变量的内容,因为我们正在添加引号)
已编辑 - 来自评论:whitelist.txt
包含要复制的文件 。
如果“白名单”不包含解决方案容易的路径,只需获取文件夹中的文件列表,并检查“白名单”中的元素不匹配
@echo off
set "from=d:\folder1"
set "to=c:\folder2"
set "whitelist=c:\somewhere\whitelist.txt"
for /f "tokens=*" %%f in (
'dir /b /a-d "%from%\*" ^| findstr /l /x /v /g:"%whitelist%"'
) do (
echo copy "%from%\%%~f" "%to%"
)
但如上所述,白名单包含文件的路径。并且dir命令不包括路径,除非使用/s
,但它没有被指示递归副本,因此,有必要生成带路径的文件列表
@echo off
set "from=d:\folder1"
set "to=c:\folder2"
set "whitelist=c:\somewhere\whitelist.txt"
for /f "tokens=*" %%f in (
'cmd /q /c "for %%x in (""%from%\*"") do (echo(%%~fx)" ^| findstr /l /x /v /g:"%whitelist%"'
) do (
echo copy "%%~f" "%to%"
)