批处理文件复制除某个文件之外的类似文件
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 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO COPY
更改为COPY
以实际复制文件。
将原文件中的 /g:
更改为 /g/c:
会导致 findstr
忽略 /g
开关,因为 /c:...
不是有效的文件名。然后 /c:"whatever"
会将 whatever
建立为要匹配的字符串。这不会与文件名流中的任何条目匹配,因此 errorlevel
每次都会设置为 1
,并且会生成 copy
命令。
文件的位置必须显式提供给 /g:
开关,但如果不是,则将隐含地相对于执行批处理文件的命令所在的目录 运行作为绝对位置提供。因此,它可以放在任何你喜欢的地方——如果需要,只需提供绝对路径。
我有将某些类型从一个目录复制到另一个目录的代码。 以下不是确切的代码,而是类似的代码,因为它包含一些个人信息。
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 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO COPY
更改为COPY
以实际复制文件。
将原文件中的 /g:
更改为 /g/c:
会导致 findstr
忽略 /g
开关,因为 /c:...
不是有效的文件名。然后 /c:"whatever"
会将 whatever
建立为要匹配的字符串。这不会与文件名流中的任何条目匹配,因此 errorlevel
每次都会设置为 1
,并且会生成 copy
命令。
文件的位置必须显式提供给 /g:
开关,但如果不是,则将隐含地相对于执行批处理文件的命令所在的目录 运行作为绝对位置提供。因此,它可以放在任何你喜欢的地方——如果需要,只需提供绝对路径。