【发布时间】:2010-09-15 00:31:32
【问题描述】:
有没有办法单步执行 .bat 脚本?问题是,我有一个构建脚本,它调用了很多其他脚本,我想看看它们被调用的顺序是什么,这样我就可以知道我必须去哪里并添加我的修改.
【问题讨论】:
-
4dos 有一个内置调试器。
标签: windows batch-file debugging cmd dos
有没有办法单步执行 .bat 脚本?问题是,我有一个构建脚本,它调用了很多其他脚本,我想看看它们被调用的顺序是什么,这样我就可以知道我必须去哪里并添加我的修改.
【问题讨论】:
标签: windows batch-file debugging cmd dos
我不知道如何逐步执行 .bat 文件,但您可以使用 echo 和 pause 来帮助调试。
回声
将在批处理文件中回显一条消息。比如ECHO Hello World 执行时会在屏幕上打印Hello World。但是,如果在批处理文件的开头没有 @ECHO OFF,您还将获得“ECHO Hello World”和“Hello World”。最后,如果您只想创建一个空行,请键入 ECHO。在末尾添加句点会创建一个空行。暂停
提示用户按任意键继续。
@workmad3:答案有更多关于使用echo 命令的好技巧。
另一个有用的资源...DDB: DOS Batch File Tips
【讨论】:
确保脚本中没有“echo off”语句,并在调用每个脚本后调用“echo on”以重置您错过的任何内容。
原因是如果echo保持打开,那么命令解释器将在执行之前输出每个命令(在参数处理之后)。让它看起来很不适合在生产环境中使用,但对于调试目的非常有用,因为您可以看到输出出错的地方。
另外,请确保您正在检查由调用的批处理脚本和程序设置的错误级别。请记住,.bat 文件中为此使用了 2 种不同的方法。如果调用程序,错误级别在 %ERRORLEVEL% 中,而从批处理文件中,错误级别在 ErrorLevel 变量中返回,不需要在其周围加上 %。
【讨论】:
面对类似的担忧,我通过简单的 Google 搜索找到了以下工具:
JPSoft 的“Take Command”包含一个批处理文件 IDE/调试器。他们的short presentation video 很好地展示了这一点。
我使用试用版已经有几个小时了。这是我的第一个拙见:
试一试。
【讨论】:
Always quote the most relevant part of an important link。如果没有链接,这个答案就会消失,这可能也很好,但通常这种未经测试的专有软件的临时建议通常最适合评论。也可以随意离开。
我发现“运行步骤”(win32) 软件完全符合我的要求: http://www.steppingsoftware.com/
您可以在查看输出和环境变量的同时加载一个 bat 文件、放置断点/开始单步执行。
评估版只允许单步执行 50 行...有没有人有类似功能的免费替代品?
【讨论】:
移除@ECHO OFF 并调用您的批处理文件将所有输出重定向到日志文件..
c:> yourbatch.bat(可选参数)> yourlogfile.txt 2>&1
发现于http://www.robvanderwoude.com/battech_debugging.php
它工作!不要忘记 2>&1...
WIZ
【讨论】:
我能想到的唯一方法是在代码中添加echos 和pauses。
【讨论】:
您是否尝试将结果重新路由到文件?喜欢whatever.bat >log.txt
您必须确保在这种情况下,所有其他调用的脚本也都记录到文件中,例如 >>log.txt
此外,如果您在该批处理文件的开头和结尾放置日期 /T 和时间 /T,您将获得当时的时间,并且您可以映射脚本运行时间和顺序。
【讨论】:
您可以在脚本末尾使用cmd \k 来查看错误。执行完成后它不会关闭你的命令提示符
【讨论】:
cmd /K。无论如何,pause 有什么问题?
或者.... 从另一个 .bat 文件调用您的主 .bat 文件并将结果输出到结果文件,即
runner.bat > mainresults.txt
runner.bat 调用主 .bat 文件的地方
您现在应该可以看到在主 .bat 文件中执行的所有操作
【讨论】:
一个非常常见的问题是批处理脚本通过双击其图标来运行。由于托管命令提示符 (cmd.exe) 实例也会在批处理脚本完成后立即终止,因此无法读取潜在的输出和错误消息。
要阅读此类消息,显式打开命令提示符窗口,移动到适用的工作目录并通过键入其路径/名称来运行批处理脚本非常重要。
【讨论】:
或者,打开一个 cmd 窗口,然后从那里调用批处理,输出将显示在屏幕上。
【讨论】:
cmd.exe 运行它时会以防万一; ad b) 你的声明是错误的,批处理文件不必工作,甚至可能出现致命的语法错误,这通常会生成控制台错误消息……