2014-02-26 42 views
0

我有一個問題,我想創建快捷方式,但當它到達路徑中的空間時,VBS腳本正在切斷。與間距問題的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
目標:令
挑動:Entry.lnk

回答

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 
+0

嘿感謝,它的工作就像一個魅力。還要感謝您向我展示批量設置變量的正確方法。 – Steve

相關問題