我正在尝试创建一个批处理脚本,以将文件的快捷方式发送到我的开始菜单,但是在设置“开始于”选项时遇到了麻烦。我正在使用Optimum X中的快捷方式来执行此操作,这可能是他们使用了十年的程序而不是我的代码出现的错误。
%~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
遇到空格时失败,例如,如果路径在Program Files中,则错误为
“参数“文件”无效
该命令的语法不正确”
很抱歉,如果这还不够,我对批次的了解很少。
您的问题不是空格,而是标准参数的处理方式。
在您的情况下,您不是将数据传递给内部命令,而是传递给将使用其自己的解析器(默认的C启动代码)的外部可执行文件。对于此解析器,反斜杠后加引号是不转义引号的转义引号。
当您%~dp1
以反斜杠结尾时,它将转引号转义,因此该参数会一直持续到第一个未加引号的空格,在您的情况下Program
是在/t
切换之后。因此,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"
现在,引号前面有两个反斜杠,这两个反斜杠将被视为转义的反斜杠,后跟该参数的结束引号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句