我需要从一台服务器复制一些大的文件到另一台(DICOM图像集)。 我写了一个batch file来自动执行这个过程。 batch file读取带有要复制的案例列表的文本文件,然后运行命令来复制每个文件。 这基本上工作。
/ WAIT选项应该让START等到应用程序完成后再继续。 我正在使用START / WAIT来运行复制文件的程序。 但是,START / WAIT似乎只能等待最多5分钟。
在我的情况下,这适用于较小的情况,下一个将在上一个完成后立即开始复制。 但是,对于较大的情况,5分钟还没有足够的时间完成,因此多个案件在同一时间复制。 这会导致问题,特别是不能完全复制的情况。
我试过用START / B选项。 这以不同的方式失败。 具体而言,运行时间超过5分钟的程序将终止,而不是被允许同时运行。
为了logging,我试图在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. )
我无法在Windows 7或10上重现5分钟的超时时间(我最多15分钟)。
为什么要使用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. )
使用/WAIT参数的START命令不使用任何超时参数,因此,我可以确认问题确实不是由5分钟(或其他时间间隔)后的命令超时引起的。
/B选项,另一方面,也不是你想要在这种情况下使用,因为它不会导致任何等待subprocess。
您可能需要启动Process Monitor,并在需要更长时间才能完成的情况下捕获跟踪,并在第一个任务尚未完成时启动另一个任务。 一旦你有了跟踪(也可以在这里附加),你可以使用Process Tree函数( CTRL+T )来查看你的进程发生了什么。 最有可能的问题不是START /WAIT命令,而是使用dgate.exe应用程序。