Там какой-либо путь состоит в том, чтобы проследить посредством выполнения пакетного файла?

Я наследовал некоторые большие пакетные файлы, и я хотел бы переписать их большему количеству "разработчика дружественный" язык.

Я хотел бы узнать следующие вещи:

  • что другие сценарии это называет
  • что другие процессы это запускает
  • что файлы делает это пишет в
  • какие переменные среды это использует, которые делают это набор

Для последней точки я знаю, что могу сделать это, прежде чем я запущу:

set > original_environment.txt

И после того, как я выполняю его, я могу сделать это:

set > new_environment.txt

и просто сделайте разность между ними..., но я, вероятно, пропущу некоторые переменные, которые могут быть сброшены, когда сценарий заканчивается (или даже все они, если сценарий работал под setlocal ).

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

8
задан Geo 2 March 2010 в 19:54
поделиться

4 ответа

Нет, нет возможности отлаживать командные файлы старого стиля. Однако вы можете просто избавиться от всех операторов ECHO OFF , и тогда все команды и вывод будут выводиться на консоль, когда вы их запускаете.

1
ответ дан 5 December 2019 в 22:17
поделиться

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

Вы также можете удалить любые операторы echo off и @ предыдущие команды; таким образом каждая команда выводится перед запуском, и вы можете перенаправить вывод в файл, чтобы изучить его позже.

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

2
ответ дан 5 December 2019 в 22:17
поделиться

Если вы готовы потратить немного денег, вам следует взглянуть на IDE командного файла Running Steps и его возможности отладки.

Я не тестировал его, но в нем есть некоторые функции, которые могут помочь вам в решении вашей задачи:

...

  • Среда отладки, подобная Visual Studio.
  • Богатый набор команд отладки (вход, выход, выход и т. Д.).
  • Богатый анализатор проектов для быстрого обнаружения ошибок и предупреждений.
  • Интегрированная поддержка переменных среды с отложенным расширением.
  • Множественные определения точек останова для соответствия вашим многочисленным потребностям отладки.
  • Сложный конвейер и поддержка перенаправления с многоцветной подсветкой.
  • Поддержка визуализации и модификации переменных среды.
  • Расширенное информационное окно для визуализации истинного определения переменной.
  • Впечатляющая функция развертывания «Для команды».
  • Интерактивный стек вызовов и окно параметров.

...

Еще они предлагают пробную версию.

1
ответ дан 5 December 2019 в 22:17
поделиться

Нет прямого способа сделать это. Но создать его не невозможно.

С выходом Windows XP / Vista / 7 хороший набор пакетных команд DOS был значительно обновлен, хотя немногие используют их или даже RTFM ( FOR /? ?)

Итак здесь я даю вам простой пакетный TRACER, который использует переключатель синтаксического анализа строк FOR / F :

@ECHO OFF

FOR /F "delims=" %%L IN (%1) DO (

  CLS

  ECHO __________________________________________________
  ECHO                            ENV. VARIABLES *BEFORE*
  SET

  ECHO __________________________________________________
  ECHO                                               LINE
  ECHO %%L

  ECHO __________________________________________________
  ECHO Hit any key to execute the line ...
  PAUSE > NUL

  ECHO __________________________________________________
  ECHO                                            EXECUTE
  %%L

  ECHO __________________________________________________
  ECHO Hit any key to fetch the next line...
  PAUSE > NUL

)

ECHO END OF FILE

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

Вот как вы его используете:

DEBUG.BAT TEST.BAT

И я также дам вам тестовый файл, чтобы опробовать его:

@ECHO OFF

ECHO Hello World! 
SET aaa=1
SET bbb=2

ECHO Doing step 2
SET aaa=
SET ccc=3

ECHO Doing step 3
SET bbb=
SET ccc=

ECHO Finished!

Эта DEBUG.BAT вещь, однако, из-за ее простоты , имеет некоторые ограничения НО , которые можно обойти, если вы вставите там достаточно BATCH-fu.

  • Он не может обрабатывать многострочные блоки :: Это можно обойти, если команды FOR анализируют токены и строят строки по мере их поступления, и IF он обнаружил открытую скобку, просто выгрузите содержимое блока скобок во временный файл, а затем вызовите себя во временном файле, например DEBUG tempfile.bat
  • Он не может обрабатывать переходы :: Вы, конечно, можете выполнить IF проверку метки GOTO , а затем выполнить FOR / F для анализа самой метки, затем можно использовать второй аргумент % 2 из DEBUG.BAT , чтобы указать метку, к которой нужно перейти, и в этом случае, если это Если указан аргумент, вы просто вращаете FOR / F , пока нужная метка не появится в поле зрения, а затем продолжите обычную отладку на следующей строке.
  • Слишком много информации из одного SET :: Просто сделайте то, что вы сделали с SET> before.txt и после, но сделайте это в каждой строке, а затем запустите cmd-line инструменты DIFF для файлов (многие доступны в сети). Затем вы получите DIFF каждой переменной, которая изменилась с последнего шага. Возможно, вы даже сможете избежать env. переменные вообще запутались, вставив туда SETLOCAL и ENDLOCAL , и тогда вы получите только локальные SET ... но YMMV.

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

Надеюсь, это поможет.

2
ответ дан 5 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: