Назад | Перейти на главную страницу

Запуск / ожидание в пакетном файле прекращает ожидание через ~ 5 минут

Мне нужно скопировать несколько больших наборов файлов с одного сервера на другой (наборы изображений 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 приложение у вас есть.