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 ...”?

相关内容