如何创建Windows批处理文件,该文件在执行时不显示命令提示符?[重复]


58

这个问题已经在这里有了答案:

我安装了一个名为Redcar的红宝石,它是从命令行启动的。当它运行时,它会窃取外壳,直到终止为止,因此我必须创建一个新的外壳窗口以继续进行命令行工作。我使用的外壳是MySysGit的GITBash外壳。

我想我找到了一个Redcar.bat文件,该文件旨在作为快捷方式启动Redcar,但是我不希望每次启动BAT文件时都打开额外的命令提示符窗口。

我如何不查看提示就运行BAT?


1
希望我知道这个+1的答案是一个很好的问题。
Supercereal 2011年

@Kyle类似的问题已经被问过 superuser.com/questions/191149/how-to-execute-cmd-exe-silently 提到HSTART并简要提到了一个VBS文件可以启动它太
barlop

您可以更新所选答案吗?当您知道如何时,是否可能并且非常简单..批处理文件:第1 set var1=hello.txt行:第2行:start "test" notepad.exe "%~dp0%var1%"
Kody Brown 2015年

只需使用::@REM。来源:superuser.com/a/843754/101936
PHPst 2015年

Answers:


38

您不能-用内置的命令提示符执行批处理文件将使窗口保持打开状态,直到批处理文件退出。

可以采取的措施来确保批处理文件尽快退出。尽可能修改批处理文件以使用该start命令运行任何程序。默认情况下,start立即返回而无需等待程序退出,因此批处理文件将继续运行,并且可能立即退出。再加上修改快捷方式以最小化运行批处理文件,您将仅看到任务栏闪烁,甚至看不到屏幕上的窗口。

一个警告是,如果您正在运行控制台模式程序(许多脚本解释器在其中运行),则批处理文件将等待该程序退出,并使用start会生成一个新的控制台窗口。在这种情况下,您需要做的是运行基于Windows版本的解释器,而不是基于控制台的解释器- start不必要。对于Perl,您可以运行wperl.exe而不是perl.exe。对于Python,它pythonw.exe代替python.exe。我下载的旧版win32 Ruby发行版具有rubyw.exe,应该做同样的事情。

最后一种可能性是使用第三方工具来运行带有隐藏窗口的命令提示符。我听说过这类事情,但从未使用过,所以我对您没有特别的了解。


谢谢,这回答了我的问题。真正令人讨厌的不是出现提示窗口,而是只要程序正在运行就必须保持打开状态。现在闪光是完全可以忍受的,而且还不那么令人讨厌。将检查我是否可以修改脚本以运行rubyw而不是ruby。
杰克

1
非常感谢您对“ python”和“ pythonw”之间的区别进行解释-最终,我找到了运行没有后台命令提示符的python窗口工具的解决方案。
FP

“ java.exe”和“ javaw.exe”是相同的。
redbeam_

您可以-只是不在批处理代码中。确实有一些Q的在这里的作为如何隐藏命令提示符superuser.com/questions/62525/... superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

我认为这是在不打开DOS窗口的情况下运行批处理文件的最简单,最短的解决方案,当您要安排一组定期运行的命令时,这可能会分心,因此DOS窗口不断弹出,这是您的解决方案。使用VB脚本调用批处理文件...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

将以上各行复制到编辑器中,并以.VBS扩展名保存文件。相应地编辑.BAT文件名和路径。然后只要运行.vbs文件,魔术就会发生!


8

您可以从命令提示符下使用START / MIN CMD.EXE / C mybatchfile.bat运行另一个批处理文件。

从外部它将显示cmd控制台窗口,但要避免这种情况,您可以创建一个快捷方式文件,并对其属性进行修改以最小化启动


2
在Windows 8.1中,此选项位于“属性”->“快捷方式”选项卡->“运行”:->“最小化”(默认为“普通窗口”)
pix


4

继续Dennis Williamson的回答,您可以编辑批处理文件并将其追加(添加)START /B到正在执行的命令中。

例如,我有一个运行腻子的批处理文件,并且有相同的问题(CMD异常),因此这是我写的方式:

@回声关闭
启动/ B putty.exe-加载name_of_my_config_file

效果很好。


4

试试看:

START /B batchfile

由barlop添加的注释

开始/?/ B说

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
如果我打开了命令提示符,那可能会起作用,但是当我使用.bat时,我双击它或在我的桌面上双击它。我试图避免必须具有命令提示符来启动该程序。
杰克

3

我不清楚您的问题,但是对于我的一些批处理文件,我使用“傻瓜”,其唯一目的是启动主批处理文件。

因此,GO.BAT将具有:

cmd /c go2.bat %1 %2 %3
exit

出口关闭命令提示符窗口,否则该窗口将保持打开状态。

GO2.BAT将具有我希望的实际批处理文件内容。

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

如果您仍然对根本不显示控制台窗口感兴趣,是一个适用于我的stackoverflow解决方案(在我的情况下,我没有在注册表中放置任何内容,但在需要的地方)。


0

只需将/ b开关放在路径的前面即可。它不会打开第二个命令提示符。


0

到目前为止,Indago的答案一直是我最好的解决方案。VBS文件允许我通过脚本运行批处理的功能,从而避免了CMD窗口的发生。有一些警告:

  1. 如果您的批次需要管理员权限,请创建或使用现有的调用VBS的批次并以管理员身份运行该批次。

  2. 在没有可见性的情况下,很难辨别您要执行的操作是否确实按照您希望的方式运行。

话虽如此,在集成之前,我将首先进行一些模拟设置/单元测试,以确保它完全按照您想要的方式工作。


0

我过去使用过cmdow,它似乎已经为我想要的工作了。

您可能需要使用以下选项之一: CMDOW [window] /HID

/HID 隐藏指定的窗口

CMDOW [window] /END

/END 关闭指定的窗口

CMDOW [window] /CLS

/CLS 礼貌地要求关闭窗口(某些窗口可能会打开一个对话框)

希望这可以帮助。


-5

只需建立一个快捷方式到批处理文件,右键点击它,点击Properties,进入General选项卡,选中名为框Hidden,点击Apply,然后OK
现在,当您打开快捷方式时,它将运行“隐藏”批处理文件。


这是错误的,因为它只是隐藏了快捷方式/批处理文件,而用户想要的是一个看不见地运行的批处理文件。
不要在这里扎根...
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.