Мне нужно скопировать несколько больших наборов файлов с одного сервера на другой (наборы изображений DICOM). Я написал командный файл для автоматизации процесса. Пакетный файл считывает текстовый файл со списком копируемых дел, а затем запускает команду для копирования каждого из них. Это в основном работает.
Параметр / WAIT должен заставить СТАРТ дождаться завершения приложения перед продолжением. Я использую 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.
)
Я не могу воспроизвести 5-минутный тайм-аут ни на Windows 7, ни на 10. (я дошел до 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.
)
START
команда с /WAIT
Параметр не использует какой-либо параметр времени ожидания, поэтому я могу подтвердить, что проблема действительно не вызвана тайм-аутом команды через 5 минут (или какой-либо другой интервал).
/B
С другой стороны, в этом случае вам тоже не стоит пользоваться, поскольку он не вызывает ожидания дочернего процесса.
Вы можете захотеть начать Монитор процесса и зафиксируйте трассировку сценария, в котором для завершения требуется больше времени, и запускает другую задачу, а первая еще не завершена. Как только у вас будет след (не стесняйтесь прикрепить его сюда), вы можете Дерево процессов функция (CTRL+T
), чтобы увидеть, что происходит с вашими процессами. Скорее всего, проблема не в START /WAIT
команда, но с dgate.exe приложение у вас есть.