批处理文件复制除某个文件之外的类似文件

Batch file copy similar files except a certain one

我有将某些类型从一个目录复制到另一个目录的代码。 以下不是确切的代码,而是类似的代码,因为它包含一些个人信息。

for /R Documents\OtherFiles\BatTest\ %%f in (
    *.aspx, *.xml, *.asax, *.asmx, *.config, *.Master
) do copy %%f Documents\OtherFiles\DestinationTest\

但是文件夹中可能有多个配置文件。

BatTest\web.config
BatTest\web2.config
BatTest\test.config

如何传输所有配置文件,例如 web.config 和 test.config 但不包括 web2.config?我知道我可以简单地手动输入所有内容,但如果将来有更多配置文件,是否可以避免再次输入所有内容?比如如果有一个 site1.config 和 prod1.config 我也需要转移。

for /R Documents\OtherFiles\BatTest\ %%f in (
 *.aspx, *.xml, *.asax, *.asmx, *.config, *.Master
) do echo %%~nxf|findstr /x /L /i /g:"myexcludefile.txt" >nul&if errorlevel 1 copy %%f Documents\OtherFiles\DestinationTest\

应该适合你(我会先使用 echo copy... 进行测试)

findstr 将读入 %%f 的文件名和扩展名,并尝试查找和精确 (/x) 文字 (/L) 不区分大小写 (/i) 在 /g: 引用的文件中匹配。如果在文件中找到该名称,errorlevel 将设置为 0。if not errorlevel 0 测试 errorlevel 是否为非零,如果文件名不是 则执行 copy 在文件中找到。

您需要做的就是使用排除的文件名设置 myexcludefile.txt,一个到一行,例如

web2.config
excludemetoo.config

您现有的批处理将出现在 "flatten" 源代码树中,生成一个目录。我想这就是你想要的。


这是一个工作版本

@ECHO OFF
SETLOCAL
SET "targetdir=U:\documents\OtherFiles\BatTest\GOSCCMWeb"
SET "backupdir=U:\documents\OtherFiles\DestinationTest"

:: This part is simply to force the two directories to exist and put some dummy files into them

MD %targetdir% 2>nul
MD %backupdir% 2>nul
FOR /L %%a IN (1,1,5) DO COPY nul "%targetdir%\file%%a.config" >NUL 2>nul
FOR /L %%a IN (1,1,5) DO COPY nul "%targetdir%\web%%a.config" >NUL 2>nul

for /R "%targetdir%" %%f in (
    *.aspx, *.xml, *.asax, *.asmx, *.config, *.Master
) do echo %%~nxf|findstr /x /L /i /g:"q27990439.txt" >nul&if errorlevel 1 ECHO copy "%%f" "%backupdir%\"
GOTO :EOF

排除文件 q27990439.txt 包含

web2.config

目标目录列表

 Volume in drive U has no label.
 Volume Serial Number is 02DD-1000

 Directory of U:\documents\OtherFiles\BatTest\GOSCCMWeb

18/01/2015  03:50    <DIR>          .
18/01/2015  03:50    <DIR>          ..
18/01/2015  03:51                 0 file1.config
18/01/2015  03:51                 0 file2.config
18/01/2015  03:51                 0 file3.config
18/01/2015  03:51                 0 file4.config
18/01/2015  03:51                 0 file5.config
18/01/2015  03:51                 0 web1.config
18/01/2015  03:51                 0 web2.config
18/01/2015  03:51                 0 web3.config
18/01/2015  03:51                 0 web4.config
18/01/2015  03:51                 0 web5.config
              10 File(s)              0 bytes
               2 Dir(s)   2,126,544,896 bytes free

执行该批次的结果:

copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\file1.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\file2.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\file3.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\file4.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\file5.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\web1.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\web3.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\web4.config" "U:\documents\OtherFiles\DestinationTest\"
copy "U:\documents\OtherFiles\BatTest\GOSCCMWeb\web5.config" "U:\documents\OtherFiles\DestinationTest\"

请注意缺少 "web2.config"

所需的 COPY 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO COPY更改为COPY以实际复制文件。

将原文件中的 /g: 更改为 /g/c: 会导致 findstr 忽略 /g 开关,因为 /c:... 不是有效的文件名。然后 /c:"whatever" 会将 whatever 建立为要匹配的字符串。这不会与文件名流中的任何条目匹配,因此 errorlevel 每次都会设置为 1,并且会生成 copy 命令。

文件的位置必须显式提供给 /g: 开关,但如果不是,则将隐含地相对于执行批处理文件的命令所在的目录 运行作为绝对位置提供。因此,它可以放在任何你喜欢的地方——如果需要,只需提供绝对路径。