让命令提示符启动记事本等应用程序并阻止,直到它关闭

让命令提示符启动记事本等应用程序并阻止,直到它关闭

我有一个批处理脚本,我本质上希望它向用户显示一个记事本窗口,其中打开了一个配置文件,供用户每次运行该脚本时进行编辑,并且我希望命令提示符等到该程序关闭后再继续执行,并运行使用该配置文件的程序。

我想这样做是因为我不想使用“set /P”命令样式在批处理脚本中获取用户输入,而且必须设置解析读取和写入具有许多需要检查的值的配置文件。

我认为,在 Windows 上执行任何可执行程序时的标准行为是,对于“exe”文件,它将在其自己的进程中打开该程序并立即将控制权交还给脚本/命令提示符。对于“bat”和“cmd”脚本文件,它将执行脚本并等待,直到控制权交还给第一个脚本或命令提示符。这应该是至少在使用“CALL”命令调用其他脚本或直接调用它时的行为。

现在在 Linux 上,我相信可执行内容的默认行为(既是没有扩展名的本机机器代码,也是“sh”文件之类的脚本)以阻塞方式执行,除非您在输入行的某处指定与符号(“&”)字符。

因此,我尝试在 Windows 上实现阻止行为,因为它在 Linux 上更容易实现,并且希望程序的关闭能够触发原始脚本继续,或者将控制权返回到命令提示符。

答案1

您可以使用start命令(注意/B /WAIT开关的顺序)

start "" /B /WAIT notepad.exe "somefile"

或者简单地

notepad.exe "somefile"

根据上面的链接:

运行 32 位图形用户界面 ( GUI) 应用程序时, cmd不会等待应用程序退出就返回命令提示符。如果您从命令脚本运行应用程序,则不会发生此行为

编辑关于卡兰的评论:为什么需要/B?

/B启动应用程序而不打开新的命令提示符窗口。

  • 说实话:如果你经营一家图形用户界面应用程序然后/B即使省略了开关,也会打开新的命令提示符窗口。
  • 另一方面,如果你运行命令行工具,省略/B开关会导致在新的命令提示符窗口中运行该工具,将立即关闭结束后所有输出都丢失了

因此,我将/B /WAIT开关一起使用作为一般原则:无论启动程序的配置如何,都保持相同的行为,而不必考虑它......

补充/B /WAIT开关顺序包含来自 StackOverflow 的示例和更多链接start /WAIT /B不起作用(/wait参数被忽略)而start /B /WAIT起作用......

答案2

notepad.exe | echo > NUL

它的作用是打开 notepad.exe,并将其所有输出重定向到命令echo > NUL。为了重定向整个输出,程序必须完成。因此,我们必须等到 notepad.exe 完成。输出转到 echo。Echo 不会以任何方式使用输入,只会将一些内容输出到 NUL。NUL 是一个标准的 Windows 流,无处可去。

答案3

在写这个问题的时候,我想到了一个答案,尽管它并没有达到我想要的确切结果。

它会打开我想要打开的任何程序,然后在下一行的后面直接添加“暂停”命令。它会暂停脚本执行,直到用户关闭刚刚出现的新程序窗口,并且需要意识到他们需要从该点手动推进脚本。暂停会打印出一个提示,解释正在发生的事情,以便潜在地通知用户(“ Press any key to continue . . .”)。

除非出于某种原因将脚本最小化,并且用户认为它已完成,否则这不是一个大问题。这也不是很好,因为它不会在程序关闭时自动恢复运行脚本的其余部分,而这正是我想要的效果。

答案4

启动 Firefox 时,以下是我所做的操作:

start "" /B /WAIT "G:\Programs\Mozilla Firefox\firefox.exe" | pause

相关内容