批处理文件复制类似的文件,除了某一个

时间:2015-01-16 18:28:19

标签: batch-file copy xcopy

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

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。

1 个答案:

答案 0 :(得分:1)

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)不区分大小写({{1} } {}匹配/i引用的文件。如果在文件中找到该名称,则/g:将设置为0. errorlevel测试errorlevel是否为非零,如果文件名if not errorlevel 0 在文件中找到。

您需要使用排除的文件名设置copy,一行设置为一行,例如

myexcludefile.txt

您现有的批次似乎会“压扁”源树,从而生成一个目录。我想这就是你想要的。


这是一个工作版本

web2.config
excludemetoo.config

排除文件@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

请注意缺少“web2.config”

为了测试目的,所需的COPY命令仅为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\" 在您确认命令正确后,将ECHO更改为ECHO COPY以实际复制文件。

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

必须将文件的位置显式提供给copy开关,但如果未将其作为绝对位置提供,则将隐式相对于运行批处理文件的命令的目录。因此,它可以放置在您喜欢的任何地方 - 如果需要,只需提供绝对路径。