105

有没有办法单步执行 .bat 脚本?问题是,我有一个构建脚本,它调用了很多其他脚本,我想看看它们被调用的顺序是什么,这样我就可以知道我必须去哪里并添加我的修改.

4

11 回答 11

75

我不知道如何逐步执行 .bat 文件,但您可以使用echopause帮助调试。

ECHO
将在批处理文件中回显一条消息。比如ECHO Hello World 执行时会在屏幕上打印Hello World。但是,如果在批处理文件的开头没有 @ECHO OFF,您还将获得“ECHO Hello World”和“Hello World”。最后,如果您只想创建一个空行,请键入 ECHO。在末尾添加句点会创建一个空行。

PAUSE
提示用户按任意键继续。

来源:批处理文件帮助

@workmad3:答案有更多使用echo命令的好技巧。

另一个有用的资源... DDB:DOS 批处理文件提示

于 2008-10-03T06:50:13.680 回答
19

确保脚本中没有“echo off”语句,并在调用每个脚本后调用“echo on”以重置您错过的任何内容。

原因是如果 echo 保持打开状态,那么命令解释器将在执行之前输出每个命令(在参数处理之后)。使它在生产中使用看起来非常糟糕,但对于调试目的非常有用,因为您可以看到输出出错的地方。

此外,请确保您正在检查由调用的批处理脚本和程序设置的 ErrorLevels。请记住,.bat 文件中为此使用了 2 种不同的方法。如果您调用程序,错误级别在 %ERRORLEVEL% 中,而从批处理文件中,错误级别在 ErrorLevel 变量中返回,并且不需要 % 围绕它。

于 2008-10-03T06:52:03.910 回答
14

面对类似的担忧,我通过简单的 Google 搜索找到了以下工具:

JPSoft 的“ Take Command ”包含一个批处理文件 IDE/调试器。他们的简短演示视频很好地展示了这一点。

几个小时以来,我一直在使用试用版。这是我的第一个拙见:

  • 一方面,它确实允许调试 .bat 和 .cmd 脚本,我现在确信它在某些情况下会有所帮助
  • 另一方面,它有时会阻塞,我不得不杀死它......特别是在调试下标时(并不总是系统地)......它没有显示“调用堆栈”或“退出”按钮。

它可以尝试一下。

于 2013-11-20T12:01:37.787 回答
9

我发现“运行步骤”(win32)软件完全符合我的要求: http: //www.steppingsoftware.com/

您可以在查看输出和环境变量的同时加载 bat 文件、放置断点/开始单步执行。

评估版只允许通过 50 行... 有没有人有类似功能的免费替代品?

于 2010-08-18T12:11:32.513 回答
7

rem out @ECHO OFF 并调用您的批处理文件将所有输出重定向到日志文件..

c:> yourbatch.bat(可选参数)> yourlogfile.txt 2>&1

http://www.robvanderwoude.com/battech_debugging.php找到

有用!!不要忘记 2>&1...

威兹

于 2009-08-22T16:01:53.093 回答
2

我能想到的唯一方法是用echos 和pauses 来添加代码。

于 2008-10-03T06:49:13.697 回答
2

您是否尝试将结果重新路由到文件?喜欢whatever.bat >log.txt

您必须确保在这种情况下,所有其他调用的脚本也都记录到文件中,例如 >>log.txt

此外,如果您将日期 /T 和时间 /T 放在该批处理文件的开头和结尾,您将获得当时的时间,并且您可以映射脚本运行时间和顺序。

于 2008-10-03T06:50:52.400 回答
2

您可以cmd \k在脚本末尾使用来查看错误。执行完成后它不会关闭您的命令提示符

于 2020-08-11T17:47:52.303 回答
1

或者.... 从另一个 .bat 文件调用您的主 .bat 文件并将结果输出到结果文件,即

runner.bat > mainresults.txt

runner.bat 调用主 .bat 文件的位置

您现在应该看到在主 .bat 文件中执行的所有操作

于 2008-11-27T16:29:29.383 回答
1

一个非常常见的问题是批处理脚本是通过双击其图标来运行的。由于托管命令提示符 ( cmd.exe) 实例也会在批处理脚本完成后立即终止,因此无法读取潜在的输出和错误消息。

要阅读此类消息,显式打开命令提示符窗口,移动到适用的工作目录并通过键入其路径/名称来运行批处理脚本非常重要。

于 2020-06-09T12:59:51.057 回答
-2

或者,打开一个 cmd 窗口,然后从那里调用批处理,输出将显示在屏幕上。

于 2010-05-29T15:51:25.270 回答