Mingw32/Msys 可以執行 dos/cmd.exe 執行檔而不搞亂參數嗎?

Mingw32/Msys 可以執行 dos/cmd.exe 執行檔而不搞亂參數嗎?

我正在嘗試從Windows bash 提示字元運行growlnotify.exe。為 mingw32 重新編譯它對我來說不是一個好的選擇。

如果我在 cmd 提示字元下使用它,growlnotify 可以工作,但在 bash 提示字元下它(大部分)會失敗。它似乎只能接受一個參數,一個沒有開關的參數(這是通知訊息)。如果有多個參數,它就會默默地失敗。如果只有一個開關且沒有其他參數,則開關將作為訊息發送。

我設法在 Google 上找到了一些提示,這與 Windows 不提供真正的 tty 有關,但沒有修復。有什麼聰明的方法可以強迫它起作用嗎?有某種方法可以正確轉義參數,使其如預期運作嗎?

新的資訊:

如果我用三重斜線運行它,參數將被忽略。然而,如果我在 DOS 中以正確的格式運行它,它就會默默地失敗。

失敗(如果我使用 // 也會失敗):

growlnotify /a:'Application Name' /n:'Notification Type' 'message goes here'

但是這個:

growlnotify ///a:'Application Name' ///n:'Notification Type' 'message goes here'

那個人會發送一條帶有「訊息在此處」的通知,但就好像我沒有費心包含前兩個參數一樣。儘管單斜杠或雙斜杠,它從不發送通知(就好像我根本不包含任何參數一樣)。

四重斜線和五重斜線的行為與三重斜線相同。

各種開關的說明

答案1

好的,正確答案如下。

要轉義參數以便可以使用 dos 可執行文件,可以將斜杠加倍,例如:

growlnotify //a:Application //t:Title "message here"

它對我來說失敗的原因是因為不知何故我沒有使用與前一天啟動時相同的應用程式名稱(並且作為一個不同的應用程序,它未註冊,並且 Growl For Windows 會忽略未註冊的通知)。

還有一些其他技巧值得一提。在 CMD 中,您可以發出以下語句:

growlnotify //a:App //t:"With Spaces" "message here"

“帶空格”炸彈。我認為 msys/bash 可能會擴展引號,然後將其傳遞進去,以便執行檔看到兩個參數,//t:與空間”。正確的方法似乎是:

growlnotify //a:App //t:With\ Spaces "message here"

另外,如果您傳入任何檔案路徑,您仍然需要使用 DOS 樣式,這表示斜線(因為最終是類似 DOS 的可執行檔將消耗它)。但這些將被解釋為轉義,這意味著它們也必須加倍。

growlnotify //a:App //ai:C:\\path\\to\\icon.png "message here"

希望這對將來的人有幫助。

答案2

您是否嘗試過從 MinGW 執行“cmd.exe /c Growlnotify.exe ...”?

相關內容