让许多进程在主进程之前等待
make many process wait before the main process
我有这个代码:
Start "" robocopy F:\DATA1 D:\Backup\
Start "" robocopy G:\DATA2 D:\Backup\
Start "" robocopy H:\DATA3 D:\Backup\
Start "" D:\Backup\rename.bat
如何让 rename.bat
在执行之前等待所有进程?
停止使用 start
。您使用开始不让他们等待。参见 start /?
。
使用 start
和 /w
或 start /wait
选项。
Start "" /w robocopy F:\DATA1 D:\Backup\
Start "" /w robocopy G:\DATA2 D:\Backup\
Start "" /w robocopy H:\DATA3 D:\Backup\
Start "" D:\Backup\rename.bat
现在 rename.bat
不会 运行 直到前面的命令完成。
来源Start a program, command or batch script (opens in a new window.)
Syntax
START "title" [/D path] [options] "command" [parameters]
Options:
/W
or /WAIT
Start application and wait for it to terminate.
(for an internal cmd command or a batch file this runs CMD /K
)
@ECHO OFF
SETLOCAL
:: first method - use flag files (qtest.bat substituted for robocopy)
:: make a tempfile
:maketemp
SET "tempfile=%temp%\%random%"
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a")
COPY NUL "%tempfile%b">nul&START "" qtestd "%tempfile%b" f:\data1 d:\backup\
COPY NUL "%tempfile%c">nul&START "" qtestd "%tempfile%c" g:\data2 d:\backup\
COPY NUL "%tempfile%d">nul&START "" qtestd "%tempfile%d" h:\data3 d:\backup\
del "%tempfile%a"
:wait
timeout /t 1 >nul
FOR %%a IN (b c d) DO IF EXIST "%tempfile%%%a" GOTO wait
ECHO Start "" D:\Backup\rename.bat
GOTO :EOF
这是一个使用标志文件的过程,应该允许您并行进行复制。
首先,使用随机数生成器选择名称在临时目录中设置一个标志文件,并创建一个后缀为"a"的文件作为占位符。
接下来,并行启动您需要 运行 的每个进程,但按照以下格式将进程放入其自己的批处理中:
@ECHO OFF
SETLOCAL
ECHO robocopy %2 %3 %4 %5 %6 %7 %8 %9
PAUSE
DEL %1
EXIT
也就是说,第一个参数是标志文件的名称。在这种情况下,您将使用剩余参数执行 robocopy。 pause
只是模拟robocopy
操作。
退出前最后的操作是删除flag文件
提交所有需要的作业后,删除 "a" 标志文件并执行 :wait
循环,直到保留 none 个标志文件,这表示每个子批处理文件已经结束。
然后 运行 您的 renane 程序(但请更改该名称,因为 rename
是批处理关键字)
timeout
命令防止批处理成为处理器占用;它只等待 1 秒。
另一种方法是使用相同的 wait
循环,但是通过执行 tasklist
并寻找以 robocopy.exe
开头的行来等待没有 robocopy
实例.等到没有这些行,再继续。
我有这个代码:
Start "" robocopy F:\DATA1 D:\Backup\
Start "" robocopy G:\DATA2 D:\Backup\
Start "" robocopy H:\DATA3 D:\Backup\
Start "" D:\Backup\rename.bat
如何让 rename.bat
在执行之前等待所有进程?
停止使用 start
。您使用开始不让他们等待。参见 start /?
。
使用 start
和 /w
或 start /wait
选项。
Start "" /w robocopy F:\DATA1 D:\Backup\
Start "" /w robocopy G:\DATA2 D:\Backup\
Start "" /w robocopy H:\DATA3 D:\Backup\
Start "" D:\Backup\rename.bat
现在 rename.bat
不会 运行 直到前面的命令完成。
来源Start a program, command or batch script (opens in a new window.)
Syntax
START "title" [/D path] [options] "command" [parameters]
Options:
/W
or/WAIT
Start application and wait for it to terminate. (for an internal cmd command or a batch file this runsCMD /K
)
@ECHO OFF
SETLOCAL
:: first method - use flag files (qtest.bat substituted for robocopy)
:: make a tempfile
:maketemp
SET "tempfile=%temp%\%random%"
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a")
COPY NUL "%tempfile%b">nul&START "" qtestd "%tempfile%b" f:\data1 d:\backup\
COPY NUL "%tempfile%c">nul&START "" qtestd "%tempfile%c" g:\data2 d:\backup\
COPY NUL "%tempfile%d">nul&START "" qtestd "%tempfile%d" h:\data3 d:\backup\
del "%tempfile%a"
:wait
timeout /t 1 >nul
FOR %%a IN (b c d) DO IF EXIST "%tempfile%%%a" GOTO wait
ECHO Start "" D:\Backup\rename.bat
GOTO :EOF
这是一个使用标志文件的过程,应该允许您并行进行复制。
首先,使用随机数生成器选择名称在临时目录中设置一个标志文件,并创建一个后缀为"a"的文件作为占位符。
接下来,并行启动您需要 运行 的每个进程,但按照以下格式将进程放入其自己的批处理中:
@ECHO OFF
SETLOCAL
ECHO robocopy %2 %3 %4 %5 %6 %7 %8 %9
PAUSE
DEL %1
EXIT
也就是说,第一个参数是标志文件的名称。在这种情况下,您将使用剩余参数执行 robocopy。 pause
只是模拟robocopy
操作。
退出前最后的操作是删除flag文件
提交所有需要的作业后,删除 "a" 标志文件并执行 :wait
循环,直到保留 none 个标志文件,这表示每个子批处理文件已经结束。
然后 运行 您的 renane 程序(但请更改该名称,因为 rename
是批处理关键字)
timeout
命令防止批处理成为处理器占用;它只等待 1 秒。
另一种方法是使用相同的 wait
循环,但是通过执行 tasklist
并寻找以 robocopy.exe
开头的行来等待没有 robocopy
实例.等到没有这些行,再继续。