如何在不启动“命令窗口”的情况下运行批处理文件?[重复]


131

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

在Windows XP上,是否可以通过快捷方式运行批处理(.bat或.cmd)文件,而没有“黑屏”?


6
您是否在询问是否可以在运行bat文件时阻止显示命令窗口?
埃里克(Eric)

6
是的,您可以使用cmd.exe快捷方式上的“属性”轻松更改输出窗口的默认颜色。(是的,这是个玩笑...)
Toby J

Answers:


86

将“ testing.bat”替换为批处理文件的名称后,将以下内容另存为wscript,例如hidecmd.vbs。

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

的第二个参数oShell.RunintWindowStyle表示程序窗口外观的值,而零值表示隐藏窗口。

参考在这里http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx


第三行是:strArgs =“ cmd / c FILEPATH \ testing.bat”吗?
Dan Z

1
有什么方法可以使蝙蝠在提升模式下运行,同时仍然保持不可见状态?
劳伦斯·斯瓦特

如何.bat使用此方法以administartor 身份运行文件?
Mehdi Dehghani

44

这只是沙吉的答案的简化。您可以通过VBScript(.vbs)脚本运行批处理脚本,如下所示:

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

这将执行您的批处理文件,并且不显示命令窗口。


如何.bat使用此方法以管理员身份运行文件?
Mehdi Dehghani

@MehdiDehghani属性>安全>以管理员身份运行。如果这仅适用于exe或应用程序,那就好了。
泰勒·斯帕克

21

只是为了扩展“使用Windows脚本”的答案(我认为这是最好的,因为它已经内置),这是通过使用单个包装脚本并将“真实”批处理文件的名称作为参数传递的方法。其他参数将传递到批处理文件。

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If

因此,例如将上面的文件保存在NoShell.vbs某个地方,然后调用:

NoShell.vbs c:\foo\my_batch_file.bat

最后,如果您希望从无法理解.vbs文件的地方(例如Visual Studio中的“外部工具”)运行此文件,则需要C:\Windows\System32\wscript.exe使用vbs文件作为其第一个参数来调用批处理文件作为第二个。


6
对于那些不喜欢必须为创建的每个新蝙蝠文件创建一个新vbs文件的想法和概念的人,这是必须使用前两个答案之一的方法,这是理想的解决方案。您将拥有多个快捷方式,而不是多个vbs文件。对于每个新的蝙蝠文件,创建vbs文件的快捷方式,右键单击它,选择“属性”>“快捷方式”选项卡,然后在“目标”框中,在已经存在的路径之后输入蝙蝠文件的路径,如上所示或类似这一点,如果该快捷方式是不一样的地方VBS文件:"C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat
罗洛2014年

如果bat文件的文件路径中有空格,如何通过vbs文件的快捷方式调用它?例如:"C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat。无论我尝试哪种方法-都用双引号引起来,用%20代替空格,或两者结合使用,均无效。我收到一条错误消息,告诉我找不到文件或什么也没有发生。这是由于我的用户错误,Windows的快捷方式的“目标”字段限制,还是由于vbs脚本无法正确处理带有空格的文件路径的问题?
罗洛2014年

@Rolo我已经更新了脚本,因此,如果任何传入的参数中都有空格,它将用引号引起来。因此,您将需要在调用时用引号将批处理文件的路径包装起来,然后将其视为单个参数并在调用之前重新包装。
Toby J

9

您可以更改快捷方式的属性以最小化运行。

要完全隐形运行它,您需要其他东西,例如Windows脚本。


1
您的第一个建议是我一直做到的方式。
martineau 2012年

8

使用以“ / B”选项开头。例如:

@echo off
start /B go.bat

25
start /b只会在当前分配的控制台中运行该程序,而不是生成一个新程序。无论如何,您将获得一个新的文件夹,因为该批处理必须使用cmd运行(这反过来会打开一个控制台)。
乔伊(Joey)2010年

@Joey是的,但这对于通过外壳执行(例如SYSTEM在C / C ++中)从其他应用程序启动批处理文件非常有用。
托马什Zato

1
@TomášZato:在这种情况下,您可以直接调用批处理文件,或者,如果用于生成进程的任何操作都没有首先创建shell,请使用cmd /c foo.cmdstart在这些情况下绝对不需要使用,而且我认为system不应使用来支持CreateProcess。通过启动批处理文件,您已经依赖于一个平台,因此不妨使用更好的工具来完成工作。
乔伊,

@Joey非常感谢,以前从未听说cmd /c过。在我的情况下,我需要使用cmd命令,但是到目前为止,我找到的所有stackexchange答案(关于运行另一个批处理文件的批处理文件)都具有使用start的最佳答案...
T_D

start /b go.bat 不会分配新的控制台(即conhost.exe的实例-或Windows 7之前的csrss.exe中的线程)。但是,由于批处理脚本是使用附加到同一控制台的cmd.exe的新实例运行的,因此会造成混乱。Shell的两个实例都将竞争从控制台读取输入的过程,通常是交替进行的。它需要/w(例如start /b /w go.bat)以便等待第二个实例,这与使用cmd /cusing 相似system。另外,如果您要致电CreateProcess,请go.bat直接运行。不需要cmd /c
Eryk Sun

6

免费的GPL开源“创建隐藏进程”

http://www.commandline.co.uk/chp/

Microsoft Security Essentials以及可能大多数其他病毒/恶意软件扫描程序都将可执行文件chp.exe视为病毒,因为它像病毒一样隐藏了您从显示窗口或任务栏按钮中指定的任何程序。

这不是病毒。例如,它不会隐藏目标进程使其不出现在任务管理器中。当然,其中包括源代码,因此您可以看到它非常小,除了运行您提供的任何程序外,什么也不做。

您甚至不必相信包含的chp.exe确实是从该来源构建的。您可以继续丢弃包含的chp.exe并从源代码进行编译,而所有必要的工具甚至都可以免费下载。


您也可以只是创建.bat或.cmd文件的快捷方式,然后右键单击快捷方式,“属性”,“快捷方式”选项卡,“运行:最小化”。然后,在计划的任务中,直接使用快捷方式而不是.bat / .cmd文件。这样可以防止弹出窗口,但是任务栏按钮仍会出现。


6

您可以使用诸如AutoIt之类的窗口脚本。

例如,只需将其写入AutoIt脚本编辑器即可。这很简单

Run("C:\test\batchfile.bat", "", @SW_HIDE)

如果要循环运行,

$x=0
Do
 Run("C:\test\batchfile.bat", "", @SW_HIDE)
 Sleep(5000)
Until $x = 1

将其编译为.exe-完成。


同样,在AutoHotkey中

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 

5

使用隐藏启动 (费用$ 20)

隐藏的开始-在没有控制台窗口或UAC提示的情况下运行应用程序和批处理文件

控制台应用程序和批处理文件在Windows启动时或按计划定期运行。这样做的主要不便之处在于,每个应用程序都打开一个控制台窗口,该窗口在屏幕上闪烁。隐藏启动(或Hstart)是一种轻巧的命令行实用程序,它使您可以在后台运行任何窗口的控制台应用程序和批处理文件,在Windows 7和Vista下处理UAC特权提升,并行或同步启动多个命令,等等。 。

在此处输入图片说明


这是一个非常好的设计和有用的应用程序。
乔什大师(Guru Josh),

5

简单的解决方案,无需使用任何其他程序。

  1. 创建要执行的批处理文件并对其进行测试。
  2. 为其创建快捷方式。
  3. 编辑快捷方式的属性:在“快捷方式”选项卡中,选择“运行最小化”。为它分配一个热键,您就完成了!

祝好运!


7
这不是OP问题的解决方案。最小化隐藏
nixda 2014年

如果您更改快捷方式以使用右侧的图标,则任务栏上最小的飞溅实际上是在提醒您一些事情正在开始。

这是解决我的问题的好方法!谢谢!
dmitry_romanov

最小化...呵呵。
gumuruh
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.