使用带有白名单 TXT 文件的批处理脚本复制某些文件



使用白名单文本文件将某个文件复制到另一个文件夹时遇到问题

在文件夹1中,我有1.txt,2.txt,3.txt我需要将 oni 1.txt 和 3.txt 复制到文件夹 2 中

在我的白名单中.txt ,我有一个"c:\folder1\1.txt"和"c:\folder1\3.txt"

如何使用批处理脚本对此问题进行复制?谢谢

@echo off
  setlocal enableextensions disabledelayedexpansion
  for /f "tokens=* usebackq" %%f in ("c:whereverwhitelist.txt") do (
    copy "%%~f" "c:folder2"
  )

对于指示文件中的每一行,将该行读入变量%%f(您的文件),并将指示文件的副本执行到 folder2(%%~f变量的内容不加引号,因为我们正在添加引号)

已编辑 - 来自注释:whitelist.txt包含复制的文件。

如果"白名单"

不包括解决方案很容易的路径,只需获取文件夹中的文件列表并检查"白名单"中不匹配的元素

@echo off
set "from=d:folder1"
set "to=c:folder2"
set "whitelist=c:somewherewhitelist.txt"
for /f "tokens=*" %%f in (
    'dir /b /a-d "%from%*" ^| findstr /l /x /v /g:"%whitelist%"'
) do (
    echo copy "%from%%%~f" "%to%"
)

但如前所述,白名单包含文件的路径。除非使用/s,否则dir命令不包括路径,但尚未指示递归副本,因此,有必要生成带有路径的文件列表

@echo off
set "from=d:folder1"
set "to=c:folder2"
set "whitelist=c:somewherewhitelist.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%"
)

最新更新