2016-09-27 38 views
0

我正尝试创建一个批处理脚本来将文件的快捷方式发送到我的开始菜单,但遇到了设置“开始”选项时遇到问题。我使用Shortcut from Optimum X来做到这一点,这可能是他们十年前的程序错误,而不是我的代码。批量%〜f1可以工作,但%〜dp1由于空格而失败

  • %~f1 = C:\Program Files (x86)\Example\Example.exe
  • %~dp1 = C:\Program Files (x86)\Example\

运行

shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%~f1" /a:c /t:%1 

按预期工作,并与 “起始位置” 设置为文件的目录创建一个快捷方式。当它遇到一个空间,例如,如果路径中的程序文​​件的错误是

“参数‘文件’是无效的

命令的语法,但运行

shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%~dp1" /a:c /t:%1 

失败不正确”

The Error.

很抱歉,如果这是不够的信息,我知道的很少批次。

回答

1

你的问题不是空格,而是如何处理标准参数。

就你而言,你不是将数据传递给内部命令,而是传递给将使用其自己的解析器(default C startup code)的外部可执行文件。在这个解析器中,后跟一个引号的反斜杠是一个不会结束参数的转义引号。

当你的%~dp1用反斜杠结束,逃离了报价,因此,其论证的/t开关Program后继续进行,直到第一个不带引号的空间,你的情况。因此,Files(在/t交换机中)不被识别为有效参数。

通常的做法是用的东西去掉结尾反斜线,像

for %%a in ("%~dp1.") do (
    shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%%~fa" /a:c /t:"%~1" 
) 

这里for命令用于处理文件路径与添加点。这就是为什么当我们检索引用元素的完整路径(%%~fa)时,不会包含结束的反斜杠。

但是,如果目标文件夹是驱动器的根目录,则此方法不起作用。结尾反斜杠不能被删除。因此,另一种方法是通过简单地转义反斜线

shortcut /f:"%targetfolder%\%fileName%.lnk" /w:"%~dp1\" /a:c /t:"%~f1" 

现在报价是由两个反斜线将被看作是一个逃脱反斜线后跟争论的结束引号之前避免报价景观。

+0

我使用第二种方法来保持简单,并且工作完美。我不认为我会想到这是一种逃避。非常感谢你! – TeeJay

相关问题