有没有办法单步执行 .bat 脚本?问题是,我有一个构建脚本,它调用了很多其他脚本,我想看看它们被调用的顺序是什么,这样我就可以知道我必须去哪里并添加我的修改.
11 回答
我不知道如何逐步执行 .bat 文件,但您可以使用echo
并pause
帮助调试。
ECHO
将在批处理文件中回显一条消息。比如ECHO Hello World 执行时会在屏幕上打印Hello World。但是,如果在批处理文件的开头没有 @ECHO OFF,您还将获得“ECHO Hello World”和“Hello World”。最后,如果您只想创建一个空行,请键入 ECHO。在末尾添加句点会创建一个空行。PAUSE
提示用户按任意键继续。
来源:批处理文件帮助
@workmad3:答案有更多使用echo
命令的好技巧。
另一个有用的资源... DDB:DOS 批处理文件提示
确保脚本中没有“echo off”语句,并在调用每个脚本后调用“echo on”以重置您错过的任何内容。
原因是如果 echo 保持打开状态,那么命令解释器将在执行之前输出每个命令(在参数处理之后)。使它在生产中使用看起来非常糟糕,但对于调试目的非常有用,因为您可以看到输出出错的地方。
此外,请确保您正在检查由调用的批处理脚本和程序设置的 ErrorLevels。请记住,.bat 文件中为此使用了 2 种不同的方法。如果您调用程序,错误级别在 %ERRORLEVEL% 中,而从批处理文件中,错误级别在 ErrorLevel 变量中返回,并且不需要 % 围绕它。
面对类似的担忧,我通过简单的 Google 搜索找到了以下工具:
JPSoft 的“ Take Command ”包含一个批处理文件 IDE/调试器。他们的简短演示视频很好地展示了这一点。
几个小时以来,我一直在使用试用版。这是我的第一个拙见:
- 一方面,它确实允许调试 .bat 和 .cmd 脚本,我现在确信它在某些情况下会有所帮助
- 另一方面,它有时会阻塞,我不得不杀死它......特别是在调试下标时(并不总是系统地)......它没有显示“调用堆栈”或“退出”按钮。
它可以尝试一下。
我发现“运行步骤”(win32)软件完全符合我的要求: http: //www.steppingsoftware.com/
您可以在查看输出和环境变量的同时加载 bat 文件、放置断点/开始单步执行。
评估版只允许通过 50 行... 有没有人有类似功能的免费替代品?
rem out @ECHO OFF 并调用您的批处理文件将所有输出重定向到日志文件..
c:> yourbatch.bat(可选参数)> yourlogfile.txt 2>&1
在http://www.robvanderwoude.com/battech_debugging.php找到
有用!!不要忘记 2>&1...
威兹
我能想到的唯一方法是用echo
s 和pause
s 来添加代码。
您是否尝试将结果重新路由到文件?喜欢whatever.bat >log.txt
您必须确保在这种情况下,所有其他调用的脚本也都记录到文件中,例如 >>log.txt
此外,如果您将日期 /T 和时间 /T 放在该批处理文件的开头和结尾,您将获得当时的时间,并且您可以映射脚本运行时间和顺序。
您可以cmd \k
在脚本末尾使用来查看错误。执行完成后它不会关闭您的命令提示符
或者.... 从另一个 .bat 文件调用您的主 .bat 文件并将结果输出到结果文件,即
runner.bat > mainresults.txt
runner.bat 调用主 .bat 文件的位置
您现在应该看到在主 .bat 文件中执行的所有操作
一个非常常见的问题是批处理脚本是通过双击其图标来运行的。由于托管命令提示符 ( cmd.exe
) 实例也会在批处理脚本完成后立即终止,因此无法读取潜在的输出和错误消息。
要阅读此类消息,显式打开命令提示符窗口,移动到适用的工作目录并通过键入其路径/名称来运行批处理脚本非常重要。
或者,打开一个 cmd 窗口,然后从那里调用批处理,输出将显示在屏幕上。