我有一个批处理脚本,可以将50个文件从不同的源复制到不同的目的地。 现在,我有50行:
xcopy "source" "dest" /y /v
现在,如果一个副本失败,我希望脚本结束。问题是我不想要100行:
xcopy "source" "dest" /y /v
if not errorlevel 0 goto ERR
在批处理脚本中是否存在类似“功能”的东西?
感谢。
答案 0 :(得分:2)
这应该使用
的文件格式d:\source\path1\*.*|n:\target\path\
d:\source\path2\*.*|n:\target\path3\
etc
更改xcopy开关以适合您的应用。 代码主要取自npomaka。
未测试。
@echo off
for /f "tokens=1,2 delims=|" %%D in (file.txt) do (
xcopy "%%~D" "%%~E" s/h/e/k/f/c || goto :end_for
)
:end_for
答案 1 :(得分:1)
for %%S in ("destination1|source1"
"destination2|source2"
"and|so on") do (
for /f "tokens=1,2 delims=|" %%D in ("%%~S") do (
xcopy "%%~D" "%%~E" /y /v || goto :end_for
)
)
:end_for
但是你需要在第一个FOR
设置一个源目标的映射,就像这个“destination1 | source1”
是否需要更好的解决方案(你已经拥有一个全部xopy operations
的球棒?)
如果您已经拥有所有来源 - >目的地的.BAT
,您也可以尝试:
for /f usebackq^ tokens^=1^,3^ delims^=^" %%S in ("your.bat") do (
xcopy "%%~S" "%%~T" /y /v || goto :end_for
)
:end_for
。您还可以robocopy
查看/R:0
。我认为robocopy在你的情况下会更有用。
为什么你有50行?文件中可以使用哪些东西作为掩码?
答案 2 :(得分:1)
下面的批处理文件提供了以下两个功能:
@echo off
setlocal EnableDelayedExpansion
for /F "delims=:" %%a in ('findstr /N "^:FileList" "%~F0"') do set n=%%a
for /F "delims=" %%a in ('more +%n% "%~F0"') do (
set source=
for %%b in (%%a) do (
if not defined source (set source=%%b) else set dest=%%b
)
xcopy !source! !dest! /y /v || goto end_for
)
:end_for
goto :EOF
:FileList
source dest
"\long\path\source number two" "\second dest folder"
如果列表中的名称包含通配符,则此解决方案不起作用。