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

dug*_*res 149 windows shortcuts command-line batch-file

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

Sha*_*ziz 105

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

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

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

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


gre*_*olf 49

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

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

这将在不显示命令窗口的情况下执行您的批处理文件。


Tob*_*s J 25

只是为了扩展“使用 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
Run Code Online (Sandbox Code Playgroud)

因此,例如将上述文件保存为NoShell.vbs某处然后调用:

NoShell.vbs c:\foo\my_batch_file.bat
Run Code Online (Sandbox Code Playgroud)

最后,如果您想从不理解 .vbs 文件的地方(例如 Visual Studio 中的“外部工具”)运行它,您将需要C:\Windows\System32\wscript.exe使用 vbs 文件作为其第一个参数进行调用,并且您的批处理文件作为第二个。

  • 对于那些不喜欢必须为创建的每个新 bat 文件创建新 vbs 文件的想法和概念的人,因为必须使用前两个答案之一,这是完美的解决方案。您将拥有多个快捷方式,而不是多个 vbs 文件。对于每一个新的bat文件,创建一个vbs文件的快捷方式,右键点击它,选择属性>快捷方式选项卡,&在目标框中在已有的路径后面输入bat文件的路径,如上图或类似如果快捷方式与 vbs 文件不在同一个位置:`"C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat`。 (7认同)

zaf*_*zaf 15

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

@echo off
start /B go.bat
Run Code Online (Sandbox Code Playgroud)

  • `start /b` 只会在当前分配的控制台中运行程序,而不是生成一个新的控制台。无论如何,您将获得一个新的,因为批处理必须使用 cmd 运行(反过来 [惊喜] 打开一个控制台)。 (27认同)
  • `start /b go.bat` *不会*分配新的控制台(即 conhost.exe 的实例——或者 Windows 7 之前的 csrss.exe 中的线程)。然而,它会造成混乱,因为批处理脚本是使用附加到*同一控制台*的 cmd.exe 新实例运行的。shell 的两个实例将竞争从控制台读取输入,通常是交替进行。它需要`/w`(例如`start /b /w go.bat`)来等待第二个实例,这类似于使用`system`时使用`cmd /c`。另外,如果您正在调用“CreateProcess”,请直接运行“go.bat”。不需要`cmd /c`。 (2认同)

ale*_*ale 10

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

要完全不可见地运行它,您将需要其他东西,例如 Windows 脚本。


小智 9

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

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

祝你好运!

  • 这不是 OP 问题的解决方案。*最小化*和*隐藏*之间有区别 (12认同)

bkw*_*bkw 7

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

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

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

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

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


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


小智 7

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

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

Run("C:\test\batchfile.bat", "", @SW_HIDE)
Run Code Online (Sandbox Code Playgroud)

如果你想循环运行它,

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

将其编译为 .exe - 就完成了。


同样,在AutoHotkey 中

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
Run Code Online (Sandbox Code Playgroud)


Kyl*_*e A 6

使用隐藏开始 (费用 20 美元)

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

控制台应用程序和批处理文件在 Windows 启动时或按计划定期运行。这样做的主要不便之处在于每个应用程序都会打开一个在屏幕上闪烁的控制台窗口。Hidden Start(或 Hstart)是一个轻量级的命令行实用程序,它允许您在后台运行控制台应用程序和批处理文件,在 Windows 7 和 Vista 下处理 UAC 权限提升,并行或同步启动多个命令等等.

在此处输入图片说明