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

评论

您是否在询问是否可以在运行bat文件时阻止显示命令窗口?

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

#1 楼

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

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


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

参考文献在这里http://msdn.microsoft.com/zh-cn/library/d5fk67ky.aspx

评论


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

– Dan Z
16年11月7日,下午3:46

有什么方法可以使蝙蝠在提升模式下运行,同时仍然保持隐身状态?

–劳伦斯·斯瓦特(Laurens Swart)
17年5月9日在22:30

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

– Mehdi Dehghani
18年7月27日在5:14

这是唯一对我有用的东西。我想使用此脚本来最大化另一个窗口,但是每当我按照隐藏任务窗口的常规说明进行操作时,例如使用“隐藏”选项和“是否登录”来创建快捷方式(选择“最小化”),等等。 ,我总是要么有一个窗口,要么脚本不起作用,可能是因为它不再以正确的用户身份运行。

–法比安·罗林(FabianRöling)
20年8月28日在16:54

#2 楼

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

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


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

评论


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

– Mehdi Dehghani
18年7月27日在5:21

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

– SirCode先生
19年6月24日在9:32

#3 楼

只是为了扩展“使用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文件作为第一个参数,并将批处理文件作为第二个参数。

评论


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

–罗洛
2014-09-10 13:53

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

–罗洛
2014-09-10 13:59



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

– Tobias J
15年1月12日在21:11

#4 楼

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

@echo off
start /B go.bat


评论


start / b只会在当前分配的控制台中运行该程序,而不是生成一个新程序。无论如何,您将获得一个新的文件夹,因为该批处理必须使用cmd运行(然后[惊奇]打开一个控制台)。

–乔伊
2010年5月11日在18:02

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

–TomášZato-恢复莫妮卡
16 Jan 10 '16 at 6:10

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

–乔伊
16年1月10日在10:57

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

– T_D
17年5月5日下午14:58

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。

–太阳神
17年7月17日在16:05

#5 楼

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

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

评论


您的第一个建议是我一直这样做的方式。

–马丁内
2012年3月19日23:32

#6 楼

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


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

祝你好运!

评论


这不是OP问题的解决方案。最小化和隐藏之间有区别

– nixda
14-10-27在9:10

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

–无论
15年1月24日在18:55

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

– dmitry_romanov
18年6月17日在4:37



最小化...呵呵。

– gumuruh
18年8月17日在4:06

#7 楼

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

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

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

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

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


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

#8 楼

您可以使用诸如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 


#9 楼

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

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



评论


这是一个非常好的设计和有用的应用程序。

–上师乔希
17年5月18日在3:40