我需要将一些大型文件集从一台服务器复制到另一台服务器(DICOM 图像集)。我编写了一个批处理文件来自动化该过程。该批处理文件读取一个包含要复制的案例列表的文本文件,然后运行命令来复制每个案例。这基本上是可行的。
/WAIT 选项应该让 START 等待应用程序完成后再继续。我使用 START /WAIT 来运行复制文件的程序。但是,START /WAIT 实际上似乎最多只等待 5 分钟。
在我看来,这对于较小的案件来说没问题,因为前一个案件完成后,下一个案件将立即开始复制。但是,对于较大的案件,5 分钟的时间不足以完成,因此多个案件最终会同时复制。这会导致问题,特别是案件无法完全复制。
我尝试使用 /B 选项和 START。但失败的原因不同。具体来说,运行时间超过 5 分钟的程序会终止,而不是被允许同时运行。
顺便说一下,我试图在 Windows 10 上运行它,但在 Windows 7 上也遇到了同样的问题。
以下是我正在使用的代码:
@echo off
REM Usage - copylist filename.txt > copylog.txt
if exist %1 (
echo File %1 found.
for /f "tokens=*" %%i in (%1) do (
echo "Copying %%i"
START "%%i" /WAIT "c:\conquest\dgate.exe" --movepatient:X-server,Y-server,%%i
)
) else (
echo File was not found.
)
答案1
我无法在 Windows 7 或 10 上重现 5 分钟超时。(我最多达到了 15 分钟)。
为什么要使用 START?您尝试过下面的代码片段吗?看起来您从 START 获得了一个新的命令处理器和一个窗口标题。也许您可以在原始命令中完成所有操作?
@echo off
REM Usage - copylist filename.txt > copylog.txt
if exist %1 (
echo File %1 found.
for /f "tokens=*" %%i in (%1) do (
echo "Copying %%i"
title "Copying %%i"
c:\conquest\dgate.exe --movepatient:X-server,Y-server,%%i
)
) else (
echo File was not found.
)
答案2
START
带有参数的命令/WAIT
不使用任何超时参数,因此,我可以确认该问题确实不是由命令在 5 分钟(或其他间隔)后超时引起的。
/B
另一方面,在这种情况下您也不会想要使用此选项,因为它不会导致子进程等待。
你可能想开始进程监控并捕获需要更长时间才能完成并启动另一项任务而第一项任务尚未完成的场景的跟踪。获得跟踪后(也可以在此处附加),您可以进程树函数 ( CTRL+T
) 来查看进程发生了什么。问题很可能不是出在START /WAIT
命令上,而是出在远程控制门应用程序。