使用批处理和vbs创建快捷方式

3

我正在尝试制作一个简单(或者至少我认为是简单的)批处理文件,以查找特定文件类型的文件,然后使用特定程序创建打开它们的快捷方式。

经过大量的挖掘,我发现这最好通过VBScript来完成,所以我创建了一个小脚本来为我创建快捷方式。但是这不起作用,所以我希望有人能告诉我原因。谢谢。

MakeShortcuts.bat:

SET ShortcutPath=c:\shortcuts\
SET ProgramPath="c:\windows\notepad.exe"
SET SearchBaseDir="C:\Documents and Settings\"

FOR /R %SearchBaseDir% %%i IN (*.gba) DO (
createShortcut "%ShortcutPath%Open %%~ni.lnk" "%ProgramPath%" "%%i"
)

createShortcut.vbs:

set obShell = CreateObject("WScript.Shell")
sShortcut = obShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
sTargetPath = obShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
sArgument = obShell.ExpandEnvironmentStrings(WScript.Arguments.Item(2))
set shortcut = obShell.CreateShortcut(sShortcut) 
shortcut.TargetPath = sTargetPath
shortcut.Arguments = sArgument
shortcut.Save

好的,当我运行MakeShortcuts.bat时,它在命令行中给我一个消息 [系统找不到指定的驱动器]。

它按预期创建了快捷方式,但目标参数周围没有引号,这会阻止快捷方式正常工作。我认为这也可能与上述错误消息有关。

我对VBScript非常陌生,所以我可能错过了一些很愚蠢的东西。请帮助我。

谢谢。

1个回答

1
我怀疑问题不在VBScript中,而是在批处理文件中。你给SearchBaseDir赋值的时候应该用双引号括起来,像这样:
SET SearchBaseDir="C:\Documents and Settings\"

然后,您需要从传递给createShortcut的参数中删除引号。

您还需要决定是使用%%i还是%%f,因为同时使用两个不一致。将%%i重命名为%%f或将%%f重命名为%%i。

最后,我不是非常确定,但是如果最后一个%%f的值包含双引号,则可能必须将其替换为%%~f以去除双引号。


感谢指出%%f和%%i的问题,我重新编写了代码,删除了程序的具体内容,但是从原始代码中复制和粘贴了一些片段。我已经编辑了上面的示例,但是在原始代码中没有同样的错误。你说的[%%~i]是什么意思?我已经按照你建议的进行了其他更改,但结果还是一样。不过还是谢谢你的回复。 - user1113827
如果%%i的值已经被双引号包围,那么%%~i将会从%%i的值中移除双引号。无论如何,我的建议是先用echo命令替换createShortcut命令,并确保您的批处理文件能够完美运行,然后再开始查找VBScript中的问题。 - Mike Nakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接