題 如何在不啟動“命令窗口”的情況下運行批處理文件? [重複]


這個問題在這裡已有答案:

在Windows XP上,我可以通過快捷方式運行批處理(.bat或.cmd)文件而不使用“黑色窗口”嗎?


122
2018-05-11 17:31


起源


您是否詢問在運行bat文件時是否可以阻止命令窗口出現? - Eric
是的,您可以使用cmd.exe快捷方式上的“屬性”輕鬆更改輸出窗口的默認顏色。 (是的,這是個玩笑......) - Toby J


答案:


將以下內容保存為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/en-us/library/d5fk67ky.aspx 


83
2018-05-11 19:55



第三行是:strArgs =“cmd / c FILEPATH \ testing.bat”? - Dan Z
任何方式在高架模式下運行蝙蝠仍然保持隱形? - Laurens Swart
怎麼跑 .bat 使用此方法作為administartor文件? - Mehdi Dehghani


這只是Shaji答案的簡化。您可以通過a運行批處理腳本 VBScript中 (.vbs)這樣的腳本:

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

這將執行您的批處理文件,不顯示任何命令窗口。


41
2018-02-15 09:52



怎麼跑 .bat 使用此方法以管理員身份? - Mehdi Dehghani


只是為了擴展“使用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文件作為其第一個參數,將批處理文件作為第二個參數。


19
2018-01-10 17:50



對於那些不喜歡為每個新創建的bat文件創建新vbs文件的想法和概念的人,因為必須使用前兩個答案中的任何一個,這是完美的解決方案。您將擁有多個快捷方式,而不是多個vbs文件。對於每個新的bat文件,創建vbs文件的快捷方式,右鍵單擊它,選擇屬性>快捷方式選項卡,然後在目標框中輸入已經存在的路徑之後的bat文件的路徑,如上圖所示或類似如果快捷方式與vbs文件不在同一位置,則: "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat。 - Rolo
如果bat文件的文件路徑有空格,如何通過vbs文件的快捷方式調用?例如: "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat。無論我嘗試什麼路徑 - 圍繞它的雙引號,%20代替空間,或這兩者的組合,沒有任何作用。我收到一條錯誤消息,告訴我無法找到該文件或沒有任何反應。這是由於我的用戶錯誤,Windows限制與目標字段的快捷方式,還是vbs腳本的問題,它不能正確處理帶空格的文件路徑? - Rolo
@Rolo我已經更新了腳本,這樣如果任何傳入參數有空格,它會用引號括起來。因此,您需要在調用時用引號將路徑包裝到批處理文件中,然後將其視為單個參數並在調用之前重新換行。 - Toby J


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

要完全無形地運行它,您將需要其他類似Windows Scripting的東西。


9
2018-05-11 19:50



你的第一個建議是我一直這樣做的方式。 - martineau


使用 開始 使用'/ B'選項。例如:

@echo off
start /B go.bat

8
2018-05-11 17:36



start /b將只在當前分配的控制台中運行該程序,而不是生成一個新程序。無論如何你都會得到一個新的,因為批處理必須用cmd運行(反過來[驚喜],打開一個控制台)。 - Joey
@Joey是的,但這對於通過shell執行從其他應用程序啟動批處理文件非常有用(比如 SYSTEM 在C / C ++)。 - Tomáš Zato
@TomášZato:在這種情況下你可以直接調用批處理文件,或者,如果你用來生成進程的任何東西不首先創建shell,請使用 cmd /c foo.cmd。絕對沒有必要使用 start 在這些情況下,我認為 system 不應該使用贊成 CreateProcess。通過啟動批處理文件,您已經依賴於一個平台,您也可以使用更好的工具來完成工作。 - Joey
@Joey感謝一幫,從未聽說過 cmd /c 之前。 cmd命令就是我所需要的,但到目前為止我找到的所有stackexchange答案,關於運行另一個批處理文件的批處理文件,都有使用start的最佳答案... - T_D
start /b go.bat  將不會 在Windows 7之前分配一個新的控制台(即conhost.exe的實例 - 或csrss.exe中的一個線程)。但是,由於批處理腳本使用附加到的cmd.exe的新實例運行,因此它會變得混亂 相同的控制台。 shell的兩個實例都將競爭從控制台讀取輸入,通常是交替的。它需要 /w (例如。 start /b /w go.bat)為了等待第二個實例,這類似於使用 cmd /c 如果使用 system。另外,如果你正在打電話 CreateProcess, 跑 go.bat 直。沒有必要 cmd /c。 - eryksun


免費GPL開源“創建隱藏進程”

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

Microsoft Security Essentials以及可能大多數其他病毒/惡意軟件掃描程序會將可執行文件chp.exe視為病毒,因為它隱藏了您指定的任何程序,只顯示窗口或任務欄按鈕,就像病毒一樣。

這不是病毒。例如,它不會隱藏目標進程出現在任務管理器中。當然包含源代碼,因此您可以看到它非常小,除了運行您提供的任何程序之外什麼也不做。

您甚至不必相信包含的chp.exe確實是從該源構建的。您可以繼續並丟棄包含的chp.exe並從源代碼編譯自己的chp.exe,並且所有必要的工具都可以免費下載。


您也可以只創建.bat或.cmd文件的快捷方式,然後右鍵單擊快捷方式“屬性”,“快捷方式”選項卡,“運行:最小化”。然後在計劃任務中,直接使用快捷方式而不是.bat / .cmd文件。這將阻止窗口彈出,但仍會出現任務欄按鈕。


6
2017-10-22 21:17





使用 隱藏的開始  (費用20美元)

隱藏啟動 - 在沒有控制台窗口或UAC提示符的情況下運行應用程序和批處理文件

控制台應用程序和批處理文件定期在Windows啟動或計劃中運行。這樣做的主要不便之處在於每個應用程序都會打開一個在屏幕上閃爍的控制台窗口。 Hidden Start(或Hstart)是一個輕量級命令行實用程序,允許您在後台沒有任何窗口的情況下運行控制台應用程序和批處理文件,在Windows 7和Vista下處理UAC權限提升,並行或同步啟動多個命令等等。

enter image description here


5
2018-05-12 16:03



這是一個非常精心設計和有用的應用程序。 - Guru Josh


您可以使用諸如的窗口腳本 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
2018-05-29 03:48





簡單的解決方案,無需任何額外的程序。

  1. 創建要執行的批處理文件並對其進行測試。
  2. Creata是它的捷徑!
  3. 編輯快捷方式的屬性:在選項卡快捷方式中,選擇“運行最小化”。給它一個熱鍵並完成!

祝好運!


4
2017-10-27 08:23



這不是OP問題的解決方案。兩者之間有區別 最小化 和 藏 - nixda
如果您更改快捷方式以使用正確的圖標,任務欄上的最小化啟動實際上是一個很好的提醒,一些事情正在開始。 - Whoever
這是一個很好的,乾淨的解決方案 我的 問題!謝謝! - dmitry_romanov
最小化......呵呵。 - gumuruh