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