使用 system() 运行批处理脚本时命令窗口关闭得非常快

Posted

技术标签:

【中文标题】使用 system() 运行批处理脚本时命令窗口关闭得非常快【英文标题】:Command window closing very quickly when running batch script with system() 【发布时间】:2022-01-12 17:24:33 【问题描述】:

我有一个在 Windows 10 上使用 Borland C++Builder(现在的 Embarcadero)开发的应用程序。

我想从我的应用程序中启动包含在 .bat 文件中的脚本,使用 以下代码:

void __fastcall TForm1::Button1Click(TObject *Sender)

    system("myfile.bat");

但是,命令窗口出现然后退出非常快,我没有时间查看结果。

我在.bat 文件中添加了pause 命令,但没有成功。

下面是我的.bat 文件的代码:

@echo off
"./ttpmacro.exe" /I "./binary.ttl"
pause

这个问题有解决办法吗?

【问题讨论】:

如果窗口正在打开,那么显然批处理文件正在运行,因为它在 cmd 窗口中运行。因此,我们需要您提供的是该批处理文件的全部内容。你已经说过pause 命令没有任何区别,所以很明显批处理文件在到达那个点之前就被破坏了。我们无法帮助您解决该问题,除非我们也可以复制该文件并重现您的问题。请使用edit 按钮,并在代码框中提交该批处理文件的内容,以获得重点帮助。 如果您真的想捕获输出,请考虑直接调用CreateProcess(),以便您可以将生成的进程的STDOUT/STDERR 重定向到您创建的管道,然后可以从您的休闲。 您的代码期望父进程在启动从您的代码编译的可执行文件时定义的当前目录是包含您的可执行文件的目录。有一种可能性是这种期望是正确的,但是在启动可执行文件时任何其他目录都是当前目录的可能性有数千种,这意味着cmd.exe 也找不到批处理文件,如果它可以通过环境变量找到它@987654335 @、ttpmacro.exebinary.ttl 在当前目录中可能不会被 cmd.exe 找到。 请阅读有关Naming Files, Paths, and Namespaces 的Microsoft 文档。 Windows 上的目录分隔符是 \,而不是 Linux/Mac 上的 /。在大多数情况下,/ 在文件/文件夹名称字符串中的使用是由于 Windows 文件 IO 函数在将文件/文件夹名称字符串传递给文件系统之前将它们替换为 \,但有些用例会导致在文件/文件夹字符串或通配符模式中使用 / 时出现意外行为。所以在批处理文件的文件/文件夹名称字符串中使用\ @geek225 Creating a Child Process with Redirected Input and Output 【参考方案1】:

我已通过更改工作目录的路径解决了我的问题。我已经修改了文件“mybat.file”的路径目录,然后一切正常。

【讨论】:

以上是关于使用 system() 运行批处理脚本时命令窗口关闭得非常快的主要内容,如果未能解决你的问题,请参考以下文章

批处理 - 在运行循环命令时最小化窗口(未启动最小化)

运行python脚本一闪而过

python程序idle能运行无错误,但是命令行窗口一闪而过

Win7 运行bat批处理文件时怎么隐藏cmd命令提示符窗口

当以 SYSTEM 用户(批处理)运行脚本时,更改当前登录的 Windows 用户的注册表值

bat脚本隐藏窗口运行