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

时间:2014-01-14 10:02:25

标签: batch-file copy

我在使用白名单文本

将某些文件复制到另一个文件夹时遇到问题

在folder1中,我有1.txt,2.txt,3.txt 我需要将oni 1.txt和3.txt复制到folder2

在我的whitelist.txt中,我有一个“c:\ folder1 \ 1.txt”和“c:\ folder1 \ 3.txt”

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

1 个答案:

答案 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%"
)