Mingw32/Msys 可以在不搞砸参数的情况下运行 dos/cmd.exe 可执行文件吗?

Joh*_*n O 7 command-line mingw msys

我正在尝试从 Windows bash 提示符运行growlnotify.exe。为 mingw32 重新编译它对我来说不是一个好选择。

如果我在 cmd 提示符下使用它,growlnotify 可以工作,但它(主要是)从 bash 提示符下失败。它似乎只能接受一个参数,一个没有开关(即通知消息)。如果有多个参数,它会默默地失败。如果只有一个开关且没有其他参数,则该开关将作为消息发送。

我设法在 Google 上找到了一些提示,表明它与 Windows 不提供真正的 tty 的方式有关,但没有修复。有什么聪明的方法可以强制这样做吗?某种正确转义参数的方法,使其按预期运行?

新讯息:

如果我用三重斜线运行它,参数将被忽略。而如果我在 DOS 中以正确的格式运行它,它会默默地失败。

失败(如果我使用 // 也会失败):

growlnotify /a:'Application Name' /n:'Notification Type' 'message goes here'
Run Code Online (Sandbox Code Playgroud)

但是这个:

growlnotify ///a:'Application Name' ///n:'Notification Type' 'message goes here'
Run Code Online (Sandbox Code Playgroud)

那个人会发送一个带有“消息到这里”的通知,但好像我没有费心去包含前两个参数。但是,单斜杠或双斜杠,它从不发送通知(好像我根本不包含任何参数)。

四重斜线和五重斜线的作用与三重斜线相同。

各种开关的说明

Joh*_*n O 10

好的,正确答案如下。

要转义参数以便可以使用 dos 可执行文件,请将斜杠加倍,例如:

growlnotify //a:Application //t:Title "message here"
Run Code Online (Sandbox Code Playgroud)

它对我来说失败的原因是因为不知何故我没有使用与前一天启动时相同的应用程序名称(并且作为不同的应用程序它未注册,并且 Growl For Windows 忽略未注册的通知)。

还有一些其他技巧值得一提。在 CMD 中,您可以发出如下语句:

growlnotify //a:App //t:"With Spaces" "message here"
Run Code Online (Sandbox Code Playgroud)

“With Spaces”炸弹。我认为 msys/bash 可能会扩展引号,然后将其传入,以便可执行文件看到两个参数,//t:WithSpaces"。正确的方法似乎是:

growlnotify //a:App //t:With\ Spaces "message here"
Run Code Online (Sandbox Code Playgroud)

此外,如果您传入任何文件路径,您仍然希望使用 DOS 样式,这意味着斜杠(因为最终会使用它的是类似 DOS 的可执行文件)。但这些将被解释为逃逸,这意味着它们也必须加倍。

growlnotify //a:App //ai:C:\\path\\to\\icon.png "message here"
Run Code Online (Sandbox Code Playgroud)

希望这对未来的人有所帮助。


Mik*_*hik 5

您是否尝试过从 MinGW 运行“cmd.exe /c grolnotify.exe ...”?

  • 使用“cmd //c [command]”可以实现此目的。 _在 MSYS 中,命令行参数“/c”被解释为 C: 驱动器,因此要传递以正斜杠开头的任何参数,您需要使用两个正斜杠。_ [来源](http://oldwiki.mingw. org/index.php/switches%20with%20forward%20slashes)。 (11认同)