带间距问题的vbs /批处理文件夹名称

时间:2014-02-26 11:15:41

标签: windows batch-file vbscript scripting

我有一个问题,我正在尝试创建快捷方式但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

1 个答案:

答案 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