Как я могу отладить сценарий .BAT?


96

Есть ли способ выполнить сценарий .bat? Дело в том, что у меня есть сценарий сборки, который вызывает множество других сценариев, и я хотел бы увидеть, в каком порядке они вызываются, чтобы я мог знать, где именно мне нужно идти, и добавлять свои модификации. .


В 4dos есть встроенный отладчик.

Ответы:


69

Я не знаю, как выполнить пошаговое выполнение файла .bat, но вы можете использовать echoи pauseдля помощи в отладке.

ECHO
Отображает сообщение в командном файле. Например, ECHO Hello World будет печатать Hello World на экране при выполнении. Однако без @ECHO OFF в начале командного файла вы также получите «ECHO Hello World» и «Hello World». Наконец, если вы просто хотите создать пустую строку, введите ECHO. добавление точки в конце создает пустую строку.

ПАУЗА
Предлагает пользователю нажать любую клавишу для продолжения.

Источник: Справка по пакетному файлу

@ workmad3: в ответе есть еще полезные советы по работе с echoкомандой.

Еще один полезный ресурс ... DDB: Советы по работе с пакетными файлами DOS


1
Думаю, это мои единственные варианты.
Vhaerun 03

18

Убедитесь, что в сценариях нет операторов «echo off», и вызывайте «echo on» после вызова каждого сценария, чтобы сбросить все, что вы пропустили.

Причина в том, что если оставить эхо включенным, то интерпретатор команд будет выводить каждую команду (после обработки параметров) перед ее выполнением. Это выглядит очень плохо для использования в производстве, но очень полезно для целей отладки, так как вы можете видеть, где что-то пошло не так.

Кроме того, убедитесь, что вы проверяете уровни ошибок, установленные вызываемыми пакетными скриптами и программами. Помните, что для этого в файлах .bat используются 2 разных метода. Если вы вызвали программу, уровень ошибки находится в% ERRORLEVEL%, тогда как из командных файлов уровень ошибки возвращается в переменной ErrorLevel и не требует символов% вокруг него.


13

Столкнувшись с подобной проблемой, я нашел следующий инструмент с помощью простого поиска в Google:

" Take Command " от JPSoft включает в себя пакетный файл IDE / отладчик. Их короткое презентационное видео прекрасно это демонстрирует.

Использую пробную версию уже несколько часов. Вот мое первое скромное мнение:

  • С одной стороны, он действительно позволяет отлаживать сценарии .bat и .cmd, и теперь я убежден, что это может помочь в некоторых случаях.
  • С другой стороны, он иногда блокируется, и мне пришлось его убить ... особенно при отладке индексов (не всегда систематически) ... он не показывает ни "стек вызовов", ни кнопку "выйти".

Это делает попытку.


1
Вероятно, это должен быть комментарий
KyleMit

8
@KyleMit, пожалуйста, объясните почему? поскольку это отдельное решение, отличное от других, и оно отвечает на исходный вопрос? это не потому, что он достаточно короткий, чтобы поместиться в комментарии, он должен быть ..
Myobis

1
Я на самом деле имел в виду , вероятно , в том , что он может пойти в любую сторону. Но это своего рода ответ lmgtfy . Из центра ответа справки раздела: Always quote the most relevant part of an important link. Без ссылки этот ответ исчезает, что, опять же, вероятно, нормально, но обычно этот тип специального предложения непроверенного проприетарного программного обеспечения обычно лучше всего подходит для комментария. Не стесняйтесь оставить и его.
KyleMit

8

Я обнаружил, что программное обеспечение «бегущие шаги» (win32) делает именно то, что я искал: http://www.steppingsoftware.com/

Вы можете загрузить файл bat, поставить точки останова / начать переходить через него, видя выходные данные и переменные среды.

В ознакомительной версии можно пройти только 50 строк ... Есть ли у кого-нибудь бесплатная альтернатива с аналогичной функциональностью?


7
Они потеряли этот домен и, вероятно, вышли из бизнеса. Вы по-прежнему можете загрузить ознакомительное программное обеспечение с web.archive.org/web/20120421211043/http://…, но больше не можете приобрести лицензию.
twasbrillig

6

удалите @ECHO OFF и вызовите ваш командный файл перенаправьте ВСЕ выходные данные в файл журнала ..

c:> yourbatch.bat (необязательные параметры)> yourlogfile.txt 2> & 1

найдено на http://www.robvanderwoude.com/battech_debugging.php

ОНО РАБОТАЕТ!! не забывайте 2> & 1 ...

WIZ


2

Единственный способ, который я могу придумать, - это посыпать код буквами echos и pauses.


2

Вы пытались перенаправить результат в файл? Как something.bat> log.txt

Вы должны убедиться, что в этом случае все остальные вызываемые скрипты также записываются в файл, например >> log.txt.

Кроме того, если вы поместите дату / T и время / T в начало и в конец этого командного файла, вы получите время, когда оно было в этот момент, и вы можете сопоставить время и порядок выполнения сценария.


Запись результата в файл не очень помогает, вызывается много скриптов, а также много исполняемых файлов, которые запускаются.
Ваэрун,

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

1

Или .... Вызовите свой основной файл .bat из другого файла .bat и выведите результат в файл результата, т.е.

runner.bat> mainresults.txt

Где runner.bat вызывает главный .bat файл

Теперь вы должны увидеть все действия, выполняемые в основном файле .bat


0

Довольно частая проблема заключается в том, что пакетный сценарий запускается двойным щелчком по его значку. Поскольку при этом cmd.exeтакже завершается работа экземпляра командной строки хоста ( ), невозможно прочитать потенциальные выходные данные и сообщения об ошибках.

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


0

вы можете использовать cmd \kв конце вашего скрипта, чтобы увидеть ошибку. он не закроет вашу командную строку после завершения выполнения


-3

или откройте окно cmd, затем вызовите пакет оттуда, вывод будет на экране.


2
Это делает так много неправильных предположений, что даже не является ответом. вероятно, самые большие две: a) предполагается, что командный файл производит вывод консоли. Это не обязательно, и б) командный файл действительно работает
Лелиэль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.