标题:[原创]批处理单步执行器(批处理版)
作者:movy [at]
www.cn-dos.net
时间:2009-12-25
已知不足:
1、由于本程序默认每行为一个单步中断点,故暂不能正确处理多行的for或
if语句(否则出现语句不完整导致的语法错误),但支持单行的if、for。
2、由于DOS执行批处理时的变量为全局,故不可单步调试 程序自身和与本
程序使用相同变量、编号的批程序。
注:(DOS重入在中断的堆栈级别本身存在制约,大家谅解)
改进:1、V1.1+:试图支持被调试程序的命令行参数。
2、V1.1:变量和标号各少用1个,并改名为非常用名称。
说明:1、转帖请注明原帖出处属于中国DOS联盟(
www.cn-dos.net/forum);
2、欢迎大家广泛测试并补充改进或建议;
3、有任何错误还请不吝指出;

正文开始:
______________________________________________________________________________
DOS或XP的批处理程序因为没有单步执行功能,定位批处理程序的错误、或检验批
处理程序的流程和逻辑功能是否满足设计意图变得十分困难。本人在netbenton大侠的
“批处理版:批处理自动调试器”
www.cn-dos.net/forum/viewthrea ...
的启发下,编制了如下可在命令行单步执行批处理程序的批处理,
经过测试,在Windows XP下运行正常!
----------------------------------------------------------------------------
@echo off&setlocal enabledelayedexpansion
if "%1"=="" echo Usage:%0 BAT_File && goto :eof
for %%Z in (bat cmd .) do if exist %1.%%Z (set $#y=%1.%%Z &&goto :d0y) else (echo not found:%1.%%Z!)
set $#y=
goto :eof
:d0y
shift
for /f "usebackq tokens=* delims=" %%Z in (%$#y%) do (echo.&echo %%Z &pause&cmd /V:ON /C %%Z)
set $#y=
----------------------------------------------------------------------------
假定程序分别存为“step.bat”、“BAT_File”,运行方法:
在DOS命令行输入: step BAT_File,程序自动搜索BAT_File.bat,BAT_File.cmd和BAT_File,找到就按行单步执行:先显示待执行的命令行,然后等用户按任意键开始执行,(显示结果,)直至被调用的批文件结束而终止退出。
测试使用了nforce1在“ [原创]变量延迟详解(新手推荐)”
www.cn-dos.net/forum/viewthrea ... 的例3,但稍作改动:
----------------------------------------------------------------------------
@echo off&setlocal EnableDelayedExpansion
set mm=girl&echo ^!mm^!
pause
----------------------------------------------------------------------------
和原例3的区别是第二行结尾改为 ^!mm^! ,以防止系统预处理时把变量mm替换为
空串。 大家可以试试 原例三结尾为 !mm!的效果。
为增加程序的健壮性,大家可自行把step.BAT中的变量(如%%z),标号(:d0y)
等替换为自己极不常用到的名称。暂此,请大家测试、反馈或修正,谢谢!
____________________________________________________________________________
[
Last edited by movy on 2009-12-26 at 16:46 ]