Як я можу налагодити сценарій .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

18

Переконайтеся, що у сценаріях немає операторів "echo off", і викликайте "echo on" після виклику кожного сценарію, щоб скинути всі пропущені.

Причина полягає в тому, що якщо залишити ехо, інтерпретатор команд видасть кожну команду (після обробки параметрів) перед її виконанням. Це виглядає дуже погано для використання у виробництві, але дуже корисно для налагодження, оскільки ви можете бачити, де вихід пішов не так.

Також переконайтеся, що ви перевіряєте рівні помилок, встановлені викликаними пакетними сценаріями та програмами. Пам'ятайте, що у файлах .bat для цього використовуються 2 різні методи. Якщо ви викликали програму, рівень помилки буде в% ERRORLEVEL%, тоді як із пакетних файлів рівень помилки повертається у змінну ErrorLevel і не потребує% навколо нього.


13

Зіткнувшись із подібним занепокоєнням, я знайшов такий інструмент із тривіальним пошуком у Google:

" Прийняти команду " 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

Ви намагалися перенаправити результат у файл? Як-от what.bat> log.txt

Ви повинні переконатися, що в цьому випадку кожен інший скрипт, що викликається, також входить у файл, наприклад >> log.txt

Крім того, якщо ви встановите дату / T та час / T на початку та в кінці цього пакетного файлу, ви отримаєте час, який був на той момент, і ви можете відобразити час роботи та порядок вашого сценарію.


Запис результату у файл не надто допомагає, існує багато сценаріїв, які викликаються, а також є багато виконуваних файлів.
Vhaerun

1
Якщо всі інші сценарії та програми пишуть на stdin, тоді всі їхні повідомлення також реєструються. Якщо ви просто виконували пакет, і бачите багато повідомлень, що працюють, тоді ви можете перенаправити їх у файл журналу.
Бірі

1

Або .... Зателефонуйте своєму основному файлу .bat з іншого файлу .bat і виведіть результат у файл результатів, тобто

runner.bat> mainresults.txt

Де runner.bat викликає основний файл .bat

Ви повинні побачити всі дії, що виконуються в основному файлі .bat зараз


0

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

Для читання таких повідомлень дуже важливо відкрито відкрити вікно командного рядка, перейти до відповідного робочого каталогу та запустити пакетний сценарій, ввівши його шлях / ім'я.


0

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


-3

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


2
Це робить стільки неправильних припущень, що навіть не є відповіддю. ймовірно, найбільші два - це те, що а) командний файл передбачає вихід консолі. Не обов’язково, і б) те, що пакетний файл насправді працює
Леліель,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.