[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 批处理调试方法略谈

作者:youxi01 转载请注明;

我想不管是什么人,都是一边写代码,一边调试
如果没有正确的调试方法,那会大大降低写代码的效率,特别是碰到一些大型的“程序”...
下面就我个人的一些经历,谈谈我的一些关于批处理的调试方法....

第一步:
去掉@echo off

几乎每个人都有这样的书写习惯,屏蔽命令回显。但是,在调试过程中,我们却要研究到底哪一行出了错误,所以这个时候再不能屏蔽命令行回显了...

第二步:(针对新手,老手直接跳过)
在原代码的每行的下一行添加pause(当然,也要把你前面添加的pause去掉)
举例说明,测试代码:
  1. @echo off
  2. echo Happy new year
  3. echo Best wishs to everyone
  4. if a==a echo ok>   %=====注意,这句末尾有个 > ,是个特殊符号,运行到这里,程序会意外退出=====%
  5. pause>nul
复制代码
运行这个代码的时候,我们会看到批处理窗口,一闪而过(运行过程中有错误),说明我们的程序有语法错误。作为新手,我们调试的时候要怎么办呢?我们就尝试在每行的后面添加 pause 的方法,如:
  1. @echo off
  2. echo Happy new year
  3. pause %=========这里添加一个pause=======%
  4. echo Best wishs to everyone
  5. if a==a echo ok>   %=====注意,这句末尾有个 > ,是个特殊符号,运行到这里,程序会意外退出=====%
  6. pause>nul
复制代码
我们再运行,发现程序竟然没意外退出,这个说明 第一 个pause前面的代码没出现语法错误,然后删除 pause这一行,在下一行 插入pause 看运行结果,例:
  1. @echo off
  2. echo Happy new year
  3. echo Best wishs to everyone
  4. pause %=========这里添加一个pause=======%
  5. if a==a echo ok>   %=====注意,这句末尾有个 > ,是个特殊符号,运行到这里,程序会意外退出=====%
  6. pause>nul
复制代码
运行,发现也没运行错误,说明前面的语句都没错,那就继续下,直到找到错误的地方....

第三步:(面对“老手”)
呵呵,这个夸张了点,可能老手都知道了,方法就是在 命令行下 直接调用自己的 调试文件,看返回结果哪里出现错误(这个需要眼睛非常 利索 罗);

再拿以上的代码来测试(假设保存为f:\test.bat,):
命令行下,输入 f:\test.bat,看运行结果:
  1. F:\>F:\test.bat
  2. Happy new year
  3. Best wishs to everyone
  4. 命令语法不正确。
复制代码
很明显,在echo Best wishs to everyone 下出现了语法错误;
当然,这个程序非常短,错误排查比较简单,如果程序段非常长,那就比较麻烦。也用这种办法去排查(先去掉@echo off),但是眼睛要紧紧盯着运行窗口,看看哪里开始出现错误,只要一出现,就马上按 ctrl + c ,然后看看,程序提示的错误是什么,下面的工作就由你们自己去完成了,呵呵...

欢迎批评指正!

以前写的

我以前写的。呵呵。

  1. 大家自己写代码的时候经常会出错,或看不懂别人写的代码,这个时候新手一般趋向与发求助帖或者问老手,这是正常的。但是,很多问题其实可以自己解决。
  2. 这里,我分享自己的经验
  3. 其实,这个方法也许大多数人都在使用,不过没有总结出来。
  4. 方法(一)把不懂的地方分离出来独自分析
  5. 方法(二):pause(一般先去掉开头的@echo off)
  6. 当自己写了一串代码,运行的时候一代而过,那个的郁闷啊!这个时候面对一串代码,我们首先分析大概在什么地方出错,这个时候pause就其作用了。
  7. 我们在代码不同的地方加上pause
  8. 然后运行,这样就容易发现错误代码的大概位置,这样就方便我们找了
  9. 方法(三):echo(一般先去掉开头的@echo off)
  10. 这个命令在我们看别人的代码的时候特别管用!
  11. 我们看老手的代码的时候,经常不懂这样语句的用法!效果。这个时候我们利用echo配合pause来观察效果。
  12. 下面我结合具体例子来分析下!
  13. 例子一:
  14. @color 0a&@set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
  15. @for,%%a,in,(%,%)do,@set]=%%a&echo.&echo.&@for,/l,%%b,in,(0,1,6)do,@call,set/p= %%]:~%%b,1%%nul
  16. 这段代码来自bbs.bathome.net的随风版主的个性签名。(随风版主对我的帮助满大的!)
  17. 这个代码随风故意弄了很多非常规的东西,我们一个一个揪出来吧!
  18. set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
  19. 我们知道set 一般后面空格在加上变量的,这里没有空格直接来个逗号。。狂晕啊
  20. 我们吧这句话拿出来测试(利用echo 和pause)
  21. sets=1 &echo %s% &pause
  22. set/=1&echo %/% &pause
  23. 看有什么不同,说明了什么呢?又学到了什么呢?
  24. @for,%%a,in,(%,%)do,@set]=%%a
  25. 这里怎么是for,%%a,
  26. 不是空格吗?难道for可以这样?赶快去测试下吧
  27. for /l %%a in (1 1 2) do echo %%a &pause
  28. for,/l,%%a in,(1 1 2) do echo %%a &pause
  29. @for,/l,%%b,in,(0,1,6)do,@call,set/p= %%]:~%%b,1%%nul
  30. 看到这句是不是晕了,哈哈
  31. 我们来分解他
  32. 这个call就是延迟变量的!不管他!
  33. set /p=%%]:~%%b,1%%<NUL
  34. 这句就是利用字符截取和变量延迟来达到足个显示字的 效果!
  35. 但是为什么能显示 四句诗呢?
  36. 不懂?
  37. 你把上诉代码改为
  38. set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
  39. @for,%%a,in,(%,%)do,@set]=%%a
  40. echo.&echo.&@for,/l,%%b,in,(0,1,6)do,@call,set/p= %%]:~%%b,1%%nul
  41. 执行一下!
  42. 发现了吗?(提示 &的作用!!)
  43. 例子二:
  44. @echo off
  45. setlocal enabledelayedexpansion
  46. for /l %%a in (1 1 5) do set str=%%a
  47. for /l %%i in (1 1 5) do set str1=!str1!%%i
  48. echo %str%
  49. echo !str1!
  50. pause
  51. 结果分别位
  52. 5
  53. 12345
  54. 大家把代码改为
  55. setlocal enabledelayedexpansion
  56. for /l %%a in (1 1 5) do set str=%%a &echo !str! & pause
  57. for /l %%i in (1 1 5) do set str1=!str1!%%i &echo !str1! & pause
  58. echo %str%
  59. echo !str1!
  60. pause
  61. 知道不同了吧
  62. 呵呵
  63. 希望对大家有帮助
  64. 欢迎大家来bbs.bathome.net来一起探讨批处理的问题!
复制代码
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

谢谢啦 你的方法对我们这些新手很有效~!

TOP

感觉比较难,有点晕.慢慢看了

TOP

啊 。  橘子.。 学习学习

TOP

有难度,
不过先学会了pause

TOP

原来这些方法已经有人先用了,以为单单我在用而已呢!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

返回列表