6

我有一个命令:

cmd.exe /c ping 1.1.1.1 -n 1 -w 10000 && echo second command goes here

但是在执行时它会打开一个命令窗口。有没有办法避免弹出命令窗口?

PS:我无法从那里删除 cmd.exe。如您所见,我试图将两个命令一个接一个地绑定在同一个字符串中。

谢谢。

编辑:对不起。它不是一个bat文件。我想在 msiexec 的“UninstallString”中执行 2 个命令。我尝试了很多事情,以至于我的问题有点跑题了。

命令是:

msiexec <product> <package> && reg delete /xxx
4

5 回答 5

9

最简单的选择是最小化启动事物。捷径目标:

cmd /c START /MIN \path\to\test.bat

或者

cmd /c START /MIN cmd /k ( ping 1.1.1.1 -w 10000 -n 1 && @ECHO All OK)

它没有隐藏或其他任何东西,但它不会出现在桌面上,或者更糟糕的是,它不会窃取焦点。

如果您希望窗口自行消失,“cmd /c ...”将实现这一点。“cmd /k ...”将使窗口保持打开状态。

@CodyGray 在他发布的 SU 链接中提到了 B 计划。有些程序不打开窗口,如 wperl、pythonw 或 wscript(在 Windows 上原生可用)。如果您可以将命令传递给其中一件事情,那么您可以有效地双击一个图标并让它“静默”运行。

如果 Perl 可用,我当然会使用它,因为您可以制作一些非常强大的单行代码,而无需创建其他文件。

wperl -MWin32 -MNet::Ping -e "$p=Net::Ping->new('icmp',10000); if ($p->ping('192.168.1.1')) { Win32::MsgBox('Ping Successful', 1 + MB_OK, 'All Good'); }"

在您的示例中,您将命令链接在一起,后者是通知。如果您不想为第一个命令打开一个窗口,那么当您通知用户某事时,第二个命令会很尴尬。让进程调用“cmd /c start cmd /c @echo Everything's OK”可能会做到这一点,但使用 CMD 窗口进行用户通知可能不是 HCI 人员会笑的。

于 2013-06-23T05:18:00.777 回答
2

正如Andreas Rejbrand已经解释的那样,命令提示符窗口不是来自脚本中的显式cmd.exe调用,而是来自执行.bat脚本本身。(尽管您声称,您没有提供任何证据表明为什么需要显式调用。脚本cmd.exe的全部意义在于将命令一起批处理。).bat

也就是说,Paul Miner 和我编写的silentbatch程序可以执行批处理脚本并抑制命令提示符窗口。要使用它,您必须创建一个 Windows 快捷方式来调用silentbatch.exe test.bat并双击它,而不是test.bat直接双击它。

于 2013-06-21T21:43:48.640 回答
2

不,所有批处理文件都在命令行窗口中打开;cmd.exe这与您的特定文件中的存在无关。批处理文件只是一些命令行命令,每行一个。

我不明白你为什么要test.bat这样写。我宁愿期待

ping 1.1.1.1 -n 1 -w 10000
echo second command goes here

如果出于某种奇怪的原因,你真的只需要使用一行,你可以简单地做

ping 1.1.1.1 -n 1 -w 10000 && echo second command goes here
于 2013-06-21T21:32:19.423 回答
1

您还可以创建批处理脚本的快捷方式,然后在属性中选择以最小化启动应用程序。这里解释:CNET:如何自动启动 Windows 中最小化的程序

步骤1:右键单击要最小化的程序的快捷方式,然后选择“属性”。
第 2 步:单击“运行”下的下拉菜单。
第 3 步:选择“最小化”,然后单击“确定”按钮。

于 2014-08-08T14:56:42.890 回答
0

从赢cmd:

start /b cmd.exe /c "ping 1.1.1.1 -n 1 -w 10000 & echo second command goes here"

在不打开另一个 cmd 窗口的情况下运行这两个命令,使父窗口畅通无阻地执行进一步的命令,而无需等待。

于 2020-05-30T11:34:02.990 回答