2013-06-21 92 views
4

有一個命令:我如何避免命令窗口彈出的cmd.exe的

cmd.exe /c ping 1.1.1.1 -n 1 -w 10000 && echo second command goes here 

但在執行時會打開一個命令行窗口。有沒有辦法避免彈出命令窗口?

PS:我無法從那裏刪除cmd.exe。正如你所看到的,我試圖在同一個字符串中依次綁定兩個命令。

謝謝。

編輯:對不起。它不是一個bat文件。我想在msiexec的「UninstallString」中執行2個命令。我正在嘗試很多事情,以至於我的問題有點被帶走。

的命令是:

msiexec <product> <package> && reg delete /xxx 
+0

顯然你可以刪除cmd.exe。我建議你除去這些限制,而不是對潛在答案施加限制。 –

+2

批處理文件總是打開控制檯窗口。如果這是一個問題,你可以考慮使用VBScript。進一步閱讀這裏:[如何創建Windows批處理文件,在執行時不顯示命令提示符?](http://superuser.com/q/233348) –

回答

6

最簡單的選擇是開始最小化的事情。快捷方式目標:

cmd /c START /MIN \path\to\test.bat 

cmd /c START /MIN cmd /k (ping 1.1.1.1 -w 10000 -n 1 && @ECHO All OK) 

它沒有隱藏什麼的,但它並不在桌面上顯示或-更糟偷焦點。

如果您希望窗口自行消失,「cmd/c ...」將使這種情況發生。 「cmd/k ...」將使窗口打開。

計劃B由@CodyGray在他發佈的SU鏈接中引用。有些程序不能打開windows,比如wperl,pythonw或wscript(在Windows上可用)。如果你可以將命令傳遞給其中一個,那麼你可以有效地雙擊一個圖標並讓它「靜靜地運行」。「

如果Perl的可用的,我肯定與去,因爲你可以通過精心設計一些非常強大的俏皮話,不會要求創建的其它文件。

wperl -MWin32 -MNet::Ping -e "$p=Net::Ping->new('icmp',10000); if ($p->ping('192.168.1.1')) { Win32::MsgBox('Ping Successful', 1 + MB_OK, 'All Good'); }" 

在你的榜樣,你鏈接如果你不想爲第一個命令打開一個窗口,那麼當你通知用戶某些東西的時候,第二個命令將會很麻煩,讓進程調用「 cmd/c start cmd/c @echo一切正常「可能會這樣做,但使用CMD窗口進行用戶通知可能不是HCI人員會微笑的東西。

+0

我應該更清楚。我想在msiexec提供的「單行」中執行兩條命令來卸載補丁(第二條命令是註冊表清理) – sambha

+0

Thanks.cmd/c START/MIN cmd/c && 做到了。鏈接命令很重要。我想在msiexec uninstallstring的MS提供的一個字符串中放入多個命令。回聲只是我爲這個問題選擇的一個示例命令(一個錯誤的命令)。 – sambha

2

沒有,在命令行窗口中打開所有批處理文件;這與您的特定文件中存在cmd.exe無關。批處理文件只是一些命令行命令,每行一個。

我不明白你爲什麼寫test.bat你的方式。我寧願希望

ping 1.1.1.1 -n 1 -w 10000 
echo second command goes here 

如果由於某種原因的bizzare,你真的只需要使用一個單一的線,你可以簡單地做

ping 1.1.1.1 -n 1 -w 10000 && echo second command goes here 
+0

我的不好。我編輯了這個問題。 – sambha

2

由於Andreas Rejbrand已經說明,在命令提示符窗口而不是從您的腳本中顯式調用cmd.exe,而是從執行.bat腳本本身。 (而且,儘管你的要求,你沒有提供任何證據,爲什麼明確調用cmd.exe是必要的。一個.bat腳本的全部意義在於一批命令組合在一起。)

這就是說,silentbatch程序保羅礦工和我寫的可以執行批處理腳本並禁止命令提示符窗口。要使用它,你必須創建一個Windows快捷方式,調用silentbatch.exe test.bat並雙擊它,而不是直接雙擊test.bat

+0

鏈接程序如何工作?它是否等待控制檯窗口顯示並關閉它? –

+0

@CodyGray它在腳本上調用'CreateProcess',但將'STARTUPINFOW :: wShowWindow'設置爲'SW_HIDE'(並且可選地將stdout和stderr重定向到日誌文件)。源代碼包含在其中。 – jamesdlin

+0

我的不好。編輯了這個問題。 – sambha

1

您也可以爲批處理腳本創建快捷方式,然後在屬性中選擇最小化啓動應用程序。這裏解釋:CNET: How to automatically start a program minimized in Windows

第1步:右鍵單擊要啓動最小化的程序的快捷方式,然後選擇屬性。
第2步:點擊運行下的下拉菜單。
第3步:選擇「最小化」,然後單擊確定按鈕。

+1

雖然放置鏈接沒問題,但人們通常也會做的是複製答案中的相關要點。這是因爲該鏈接可能會在未來的某個時間中斷,並使答案變得毫無價值。 –

相關問題