如何避免在cmd.exe上弹出命令窗口

时间:2013-06-21 21:28:49

标签: windows command-line batch-file windows-installer

我有一个命令:

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

5 个答案:

答案 0 :(得分:7)

最简单的选择是启动最小化的东西。快捷方针目标:

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 ......”会打开窗户。

计划B由@CodyGray在他发布的SU链接中引用。有些程序不能打开窗口,比如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 OK”可能会这样做,但使用CMD窗口进行用户通知可能不是HCI人员会笑的东西。

答案 1 :(得分: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

答案 2 :(得分:2)

正如Andreas Rejbrand已经解释过的那样,命令提示符窗口不是来自脚本中的显式cmd.exe调用,而是来自执行.bat脚本本身。 (尽管您提出了索赔,但您没有提供任何证据证明为何需要明确调用cmd.exe.bat脚本的重点是批量命令。)< / p>

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

答案 3 :(得分:1)

您还可以为批处理脚本创建快捷方式,然后在属性中选择以最小化启动应用程序。这里解释:CNET: How to automatically start a program minimized in Windows

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

答案 4 :(得分:0)

从win cmd:

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

运行这两个命令而无需打开另一个cmd窗口,而无需等待便可以使父窗口保持畅通无阻,以等待其他命令。