如何调试.BAT脚本?


96

有没有办法逐步执行.bat脚本?关键是,我有一个构建脚本,该脚本可以调用许多其他脚本,并且我想看看它们的调用顺序是什么,以便我可以确切知道要去哪里并添加我的修改。 。


4dos在调试器中具有构建。

Answers:


69

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

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

暂停
提示用户按任意键继续。

来源:批处理文件帮助

@ workmad3:答案具有使用该echo命令的更多提示。

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


1
我想这些是我唯一的选择。
Vhaerun

18

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

原因是如果保留了echo,则命令解释器将在执行命令之前输出每个命令(在参数处理之后)。使它看起来真的不适合用于生产环境,但对于调试目的非常有用,因为您可以看到输出出了问题。

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


13

面对类似的关注,我发现了以下带有简单的Google搜索工具:

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

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

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

它值得一试。


1
这可能是一条评论
KyleMit

8
@KyleMit您能解释为什么吗?因为这是一个独立于其他解决方案的独立解决方案,并且确实回答了原始问题?不是因为它足够短才能适合评论,而是必须这样做
。– Myobis

1
我实际上的意思可能是,它可能以任何一种方式进行。但这是一个lmgtfy答案。从帮助中心的“答案”部分:Always quote the most relevant part of an important link。如果没有链接,此答案就会消失,这也许还可以,但是通常情况下,未经测试的专有软件的这种临时建议通常最适合用于注释。也可以随意离开。
KyleMit 2013年

8

我发现“运行步骤”(win32)软件完全可以满足我的需求:http//www.steppingsoftware.com/

您可以加载一个bat文件,放置断点/开始逐步查看它,同时查看输出和环境变量。

该评估版仅允许浏览50行...有人有具有类似功能的免费替代产品吗?


7
他们失去了这个领域,大概已经倒闭了。您仍然可以从web.archive.org/web/20120421211043/http://…下载评估软件,但无法再购买许可证。
twasbrillig 2014年

6

rem out @ECHO OFF并在所有输出中调用批处理文件redirectin到日志文件。

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

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

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

威士


2

我能想到的唯一方法就是用echos和pauses 来使代码变得混乱。


2

您是否尝试将结果重新路由到文件?就像what.bat> log.txt

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

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


将结果写入文件并没有多大帮助,有许多脚本被调用,而且有许多可执行文件被执行。
Vhaerun

1
如果所有其他脚本和程序都写入标准输入,那么它们的所有消息也会被记录。如果仅执行批处理,并且看到许多消息在运行,则可以将它们重定向到日志文件。
比里

1

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

Runner.bat> mainresults.txt

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

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


0

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

要读取此类消息,非常重要的一点是,明确打开“命令提示符”窗口,操纵到适用的工作目录,然后通过键入其路径/名称来运行批处理脚本。



-3

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


2
这做出了许多错误的假设,甚至无法回答。可能最大的两个是:a)假定批处理文件产生控制台输出。不必,并且b)批处理文件实际上正在工作
Leliel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.