Windows快捷方式目标参数以@开头


12

我有一个Windows应用程序,需要使用桌面快捷方式和一些命令行参数来调用。

我已经完成了数千次,但是这有点不同。而不是使用普通的命令行参数(例如-e 12345或)-example 12345,而是使用@12345(以@符号开头)。

Windows快捷方式不喜欢该参数紧随可执行文件名称之后,而是将所有内容剥离。我不知道为什么

例如:

c:\example\example.exe @12345 -e9876作为“目标”,保存时会去除所有参数,并保留c:\example\example.exe目标。

但是 c:\example\example.exe -e9876 @12345效果很好。它可以保存并验证,一切都很好。

但是我需要@参数是命令上的第一个。除了执行将命令包装在批处理文件中并调用该批处理之类的操作外,如何使@符号成为Windows快捷方式上的第一个命令行参数?


1
另一个选择是(假定)引用该参数(假设该程序支持该参数)。不过,我在测试中发现了有趣的行为:参数已从“目标”字段中删除,仍传递给了目标程序!实际上,保留了现在不可见的参数,直到您再次编辑该字段为止,并且.lnk文件实际上是不同的。(已将目标作为一个批处理文件进行了测试,该文件只是回显传入的参数。)
Bob

Answers:


13

谁知道?Windows显然将@字符视为定界符。Windows命令将仅解释命令中的第一个元素...,因此它将有效地截断其余部分。显然,您可以通过在行为^前提供a 来使符号转义来覆盖行为。

c:\example\example.exe ^@12345 -e9876


3
嘿! 有用!出于好奇,您到底是如何找到答案的?
马克·亨德森

3
深入了解过去的黑暗时期。有人提到不再存在(或至少不容易找到)的文件,并提到其中一些花絮。他还提到了$%等可能引起其他问题的字符。您可以使用相同的^字符转义那些字符。您也可以按^^预期进行逃脱。
TheCompWiz

4
@MarkHenderson插入符号“ ^”是标准的“转义下一个字符”符号,然后由整个WIN32(及更高版本的64位)API使用,因为(如果我没记错的话)至少NT 3.5(是的:我变老了) )。它几乎可以在Windows中任何可以提供命令行的地方使用:CMD脚本/提示,WINdows + R运行框,快捷方式,与服务和计划任务相关联的命令行,仅用于命名很少。
Tonny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.