我有将某些类型从一个目录复制到另一个目录的代码。 以下不是确切的代码,而是类似的东西,因为它有一些个人信息。
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。
答案 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
开关,但如果未将其作为绝对位置提供,则将隐式相对于运行批处理文件的命令的目录。因此,它可以放置在您喜欢的任何地方 - 如果需要,只需提供绝对路径。