#batch-file
#пакетный файл
Вопрос:
В случае batch, если вы получаете сообщение об ошибке, максимум, что вы видите, это текстовое сообщение, а затем программа завершается. Есть ли способ замедлить его? или чтобы он останавливался перед закрытием при обнаружении ошибки?
Спасибо
Ответ №1:
Если вы запускаете пакетный файл из командной строки в окне MS-DOS и возникает ошибка, вы можете просто просмотреть текст в окне, чтобы увидеть, что произошло.
С другой стороны, если вы запускаете пакетный файл с помощью двойного щелчка в проводнике, вы ничего не увидите, если в пакетном файле есть ошибка. Это ваш случай? Если это так, то самое простое решение — протестировать пакетный файл в окне MS-DOS, пока он не заработает нормально.
Однако, если вам все еще нужен способ прекратить закрытие окна DOS при завершении работы пакетного файла, вы можете сделать это следующим образом:
- Щелкните правой кнопкой мыши на вашем пакетном файле и выберите Создать сокращенный файл, сокращенный файл будет создан.
- Щелкните правой кнопкой мыши на ярлыке и выберите Свойства
- В Target после «C:Pathfilename.bat » добавить строку: amp; ПРИОСТАНОВИТЬ
- Выберите OK
Таким образом, когда вы запускаете ярлык с помощью двойного щелчка, окно DOS будет выполнять ПАУЗУ после завершения работы пакетного файла по любой причине.
Комментарии:
1. Это хороший момент. Запуск его через окно MS-DOS будет похож на вызов файла Bat. Спасибо!
2. @GarethJones: Извините меня. Если вы считаете мой ответ полезным, могу я попросить вас проголосовать за? Спасибо! Кстати, вы видели мой ответ на ваш вопрос «таймер на 5 секунд в set / p»? Я думаю, что мой ответ может значительно обогатить вашу пакетную игру!
3. Я пытался, но из-за того, что беспроводная связь в моей части дома настолько отстой, она вернулась с ошибкой. Также я видел ваш ответ, спасибо, это было большим подспорьем, так как я не знал о том, что подобные внешние программы доступны для пакетной обработки
4. Это было очень полезно, пакетный файл работал при запуске из командной строки, но не при нажатии (из-за относительного пути)
5. Это не совсем полезный ответ. Некоторые пакетные скрипты запускают другой cmd.exe , что означает, что все это не имеет отношения к делу.
Ответ №2:
Перенаправьте вывод с помощью >, чтобы записать его в файл.
Вам может потребоваться: команда> файл 2> amp; 1
Комментарии:
1. Почему бы вам не попробовать и не посмотреть?
2. В интересах других, кто находит этот пост: второе предложение будет включать сообщения об ошибках в выходной файл в Windows 7 (и я предполагаю, что старше). Если вы оставите часть 2> amp; 1, ошибки перейдут на консоль, что также может быть полезно.
Ответ №3:
попробуйте это :
if NOT ["%errorlevel%"]==["0"] (
pause
exit /b %errorlevel%
)
Комментарии:
1. Это работает! Я думаю, это должен быть принятый ответ.
Ответ №4:
Запустите скрипт из настоящего CMD.exe и добавьте «exit /b 1» в конец скрипта файла. Удалите любой простой «выход».
Комментарии:
1.
exit /b 1
означает «завершите работу этого пакетного скрипта с кодом ошибки 1 «. Это не означает «выйти из этого пакетного сценария только в том случае, если был установлен код ошибки», о чем и задается вопрос.
Ответ №5:
Откройте новое окно cmd и выполните там свою команду. Вновь открытое окно не будет закрыто при возникновении ошибки.
start cmd /k [command]
Это работает для меня с базовыми командами. Не уверен, что это полезно для чего-то более продвинутого.
Комментарии:
1. вы также можете передавать команды, подобные этой:
start cmd /k "command 1 amp; command 2 amp; command 3"
Ответ №6:
Чтобы остановить пакетный скрипт до его завершения, поместите pause
команду в новую строку, которая заставит скрипт ждать ввода пользователя (например, клавиши enter), прежде чем продолжить (или закрыть).
Комментарии:
1. Это не сработает, потому что, если в пакетном файле появится ошибка, он завершится сбоем, и поэтому не будет ни конца скрипта, ни каких-либо пауз.
Ответ №7:
на секунду
PING -n 2 127.0.0.1 > NUL 2>amp;1
или на 10 секунд
timeout /t 10 /nobreak
Ответ №8:
Это работает для меня. Аналогично ответу @ Sri7, но вам нужны скобки и кавычки:
if NOT ERRORLEVEL 0 (
pause
)