1

Когда я использую команду start в пакетном скрипте для запуска программы, я ожидаю, что эта программа будет запущена асинхронно; это происходит точно так, как я ожидал бы, если бы программа, которую я запускаю, существовала.

Однако, если я пытаюсь start программу, которая не существует, Windows отображает всплывающее окно, сообщающее, что не может найти файл, блокируя выполнение пакетного сценария, пока я не закрою всплывающее окно вручную. Это раздражает. Из-за некоторых удаленных файловых систем, я не могу надежно гарантировать, что двоичный файл будет существовать до его запуска, и у меня нет возможности заблокировать двоичный файл. В моем сценарии, если двоичный файл не существует, это не критическая ошибка, и мой сценарий должен просто продолжаться.

Есть ли способ предотвратить создание этих всплывающих окон в первую очередь, или в качестве альтернативы однострочный пакет /cmd, который можно использовать для асинхронного выполнения приложений, которые не будут блокировать продолжение сценария в случае его сбоя (что-то, что я могу просто так же легко использовать из CLI как пакетный скрипт)?

3 ответа3

2

У меня нет возможности надежно гарантировать, что бинарный файл будет существовать до того, как я его запущу

Вы можете использовать which.cmd чтобы увидеть, существует ли двоичный файл, и возвращает соответствующий ERRORLEVEL .


Обходной путь для вашей проблемы (Отключение всплывающего окна «Windows не удается найти [foo] .exe '»)

  • запустить which program
  • проверьте ERRORLEVEL
  • работать start только тогда , когда program найдена.
:: WHICH.CMD  CommandName  [ReturnVar]
::
::  Determines the full path of the file that would execute if
::  CommandName were executed.
::
::  The result is stored in variable ReturnVar, or else it is
::  echoed to stdout if ReturnVar is not specified.
::
::  If no file is found, then an error message is echoed to stderr.
::
::  The ERRORLEVEL is set to one of the following values
::    0 - Success: A matching file was found
::    1 - No file was found and CommandName is an internal command
::    2 - No file was found and CommandName is not an internal command
::    3 - Improper syntax - no CommandName specified

Ссылка ниже включает полный исходный код для которого which.cmd (который был написан пользователем суперпользователя dbenham).

Source which.cmd - Показать полный путь к исполняемому файлу.

2

Одним из способов было бы скопировать / переместить двоичный файл в новое временное местоположение с уникальным именем и выполнить его.
Если копирование / перемещение выполнено успешно, уникальный файл существует, и вы можете выполнить его без влияния "махинаций с удаленной файловой системой". Если нет, то, по крайней мере, вы знаете, что вы не получите всплывающее окно.

-1

Используйте ключ /C для команды запуска, он должен пропустить раздражающее всплывающее окно.

start / c appthatmayfail.exe args

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .