del "%temp%\robocopy1.flag" "%temp%\robocopy2.flag" >nul
start /b cmd /c robocopy /s /mir D:\1 E:\1 ^& IF %ERRORLEVEL% lss 8 echo > "%temp%\robocopy1.flag"
start /b cmd /c robocopy /s /mir D:\1 E:\2 ^& IF %ERRORLEVEL% lss 8 echo > "%temp%\robocopy2.flag"
:wait
timeout 5
if not exist "%temp%\robocopy1.flag" goto wait
if not exist "%temp%\robocopy2.flag" goto wait
pause
echo success
使用cmd /c
和^&
将检查与robocopy结合起来并使用临时文件,因为在父进程中不会看到变量:
del "%temp%\robocopy1.flag" "%temp%\robocopy2.flag" >nul
start /b cmd /c robocopy /s /mir F:\1 F:\dest\1 ^& IF %ERRORLEVEL% lss 8 echo ^>"%temp%\robocopy1.flag"
start /b cmd /c robocopy /s /mir F:\1 F:\dest\2 ^& IF %ERRORLEVEL% lss 8 echo ^>"%temp%\robocopy2.flag"
:wait
timeout 1 >nul
if not exist "%temp%\robocopy1.flag" goto wait
if not exist "%temp%\robocopy2.flag" goto wait
rem final robocopy
注意:^
防止在自动复制之前立即执行if
,并将&
传递给cmd /c
,以便第二个命令将在自动复制后由启动的命令处理器cmd
执行。