我有一个问题,我正在尝试创建快捷方式但vbs脚本在到达路径中的空间时会被切断。
我已经浏览了一下,但我见过的许多处理vbs的字符串都没有从批处理文件传递。
这是我的代码,因此您可以更好地理解
批处理文件:
@echo off
set office7="C:\ProgramData\Microsoft\Windows\Start Menu\Strategix Programs\Office Programs"
mkdir %office7%
cscript "H:\Installation Batch Files\createLink.vbs" ""%office7%\Purchase Order Entry.lnk"" "\\192.168.0.7\Temp\stock\Porder10.exe" "T:\Stock"
pause
Vbs文件:
Set oShell = CreateObject("WScript.Shell") Set args = WScript.Arguments
sShortcut = oShell.ExpandEnvironmentStrings("" & args.Item(0) & "") sTarget = args.Item(1) sStartIn = args.Item(2)
WScript.Echo "Shortcut: " & sShortcut WScript.Echo "Target: " & sTarget WScript.Echo "StartIn: " & sStartIn
输出:
快捷方式:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Strategix Programs \ Office Programs \ Purchase
目标:订单
StartIn:Entry.lnk
答案 0 :(得分:2)
批次部分
@echo off
set "office7=C:\ProgramData\Microsoft\Windows\Start Menu\Strategix Programs\Office Programs"
mkdir "%office7%"
cscript "H:\Installation Batch Files\createLink.vbs" "%office7%\Purchase Order Entry.lnk" "\\192.168.0.7\Temp\stock\Porder10.exe" "T:\Stock"
pause
处理引号的“正确”方式不包括在值中。如果以后需要它们,添加它们很容易(查看mkdir
命令和参数),但删除它们不是。没有充分理由,不要包括它们。所以,“正确”的方式是
set "var=value"
这会将值赋给变量,处理有问题的字符(所有赋值都在引号内)并在变量值的行尾保留可能的空格。
现在,到vbs部分
Dim oShell
Set oShell = CreateObject("WScript.Shell")
Dim args
Set args = WScript.Arguments
Dim sShortcut, sTarget, sStartIn
sShortcut = args.Item(0)
sTarget = args.Item(1)
sStartIn = args.Item(2)
WScript.Echo "Shortcut: " & sShortcut
WScript.Echo "Target: " & sTarget
WScript.Echo "StartIn: " & sStartIn
不需要ExpandEnvironmentStrings
,在cmd
中解析批次行时已完成此操作。 %office7%
是对变量值的引用,而不是变量的名称,解析器用变量值替换变量读取。
并为快捷方式创建
With oShell.CreateShortcut( sShortcut )
.TargetPath = sTarget
.WorkingDirectory = sStartIn
.Save
End With