Home > other >  Problem using windows path having space in it
Problem using windows path having space in it

Time:08-01

I have created a VB script that I am calling from my batch file on Windows 10. The script is something like this:

Set startupShortcut = sh.CreateShortcut("%ProgramData%\Microsoft\Windows\Start Menu\Programs\MyApplication.lnk")
startupShortcut.IconLocation = "C:\Users\MyUser\MyApplication\resources\MyApplication.ico"
startupShortcut.TargetPath = "C:\Users\MyUser\MyApplication\MyApplication-1.4.4.jar"
startupShortcut.WorkingDirectory  = "C:\Users\MyUser\MyApplication"
startupShortcut.Save

The shortcut path here has a space in "Start Menu" string. Running it does not create any shortcut at the mentioned path, but when I use a path without shortcut for eg. Desktop, it works fine.

I really need help to understand how I can use paths having space in them.

CodePudding user response:

Here is a subroutine example that can be used for creating a shortcut :


Option Explicit
Const Title = "Create a shortcut for the current vbscript or any other application with arguments using an array"
Call RunAsAdmin()
 
Create_Shortcut Array("Desktop","Recent","shell:Recent")
 
Create_Shortcut Array("Desktop","User profile","%userprofile%")
 
Create_Shortcut Array(_
    "Desktop",_
    "NetworkDiagnostics",_
    "%SystemRoot%\system32\msdt.exe",_
    "-skip TRUE -path %Windir%\diagnostics\system\networking -ep NetworkDiagnosticsPNI",_
    "%SystemRoot%\system32\msdt.exe,0",_
    "Network Diagnostics to fix connections problems",_
    "CTRL ALT D"_
)
'-------------------------------------------------------------------------------------------------------
Sub Create_Shortcut(rArgs) 
    Dim objShell,objShortCut,ObjShortcutPath,ShortcutName,ShortcutPath,ShortcutLocation
    Dim TargetPath,Arguments,IconLocation,Description,HotKey
    Set objShell = CreateObject("WScript.Shell")
    If UBound(rArgs) > 1 Then
        ShortcutLocation       = cstr(rArgs(0))
        ShortcutPath           = objShell.SpecialFolders(ShortcutLocation)
        ShortcutName           = cstr(rArgs(1))
        Set objShortCut        = objShell.CreateShortcut(ShortcutPath & "\" & ShortcutName & ".lnk")
        TargetPath             = objShell.ExpandEnvironmentStrings(rArgs(2))
        objShortCut.TargetPath = TargetPath 
        If ShortcutPath = "" Then 
            MsgBox "Error The Shortcut Path Does Not Exsists On Your System."_
            ,vbCritical vbSystemModal,Title
            wscript.quit(1)
        End If
    End If
 
    If UBound(rArgs) > 2 Then
        Arguments = cstr(rArgs(3))
        objShortCut.Arguments = Arguments
    End If
 
    If UBound(rArgs) > 3 Then
        IconLocation = cstr(rArgs(4))
        ObjShortCut.IconLocation = IconLocation
    End If
 
    If UBound(rArgs) > 4 Then
        Description = cstr(rArgs(5))
        ObjShortCut.Description = Description
    End If
    
    If UBound(rArgs) > 5 Then
        HotKey = cstr(rArgs(6))
        ObjShortCut.HotKey = HotKey
    End If
    objShortCut.Save
    On Error Resume Next
    If Err.Number <> 0 Then
        ShowError() 
    Else 
        objShell.Popup "The Shortcut "& chr(34) & ShortcutName & chr(34) &" is created Successfully !"& vbcrlf &_
        "On " & chr(34) & ShortcutPath & chr(34),5,Title,vbInformation vbSystemModal
    End If
End Sub
'-------------------------------------------------------------------------------------------------------
Sub ShowError()
    ErrDetail = "Description : " & Err.Description & vbCrlf & _
    "Error number : " & Err.Number & vbCrlf & _
    "Error source : " & Err.Source
    MsgBox ErrDetail,vbCritical vbSystemModal,Title
    Err.clear
End Sub
'-------------------------------------------------------------------------------------------------------
Sub RunAsAdmin()
    If Not WScript.Arguments.Named.Exists("elevate") Then
        CreateObject("Shell.Application").ShellExecute WScript.FullName _
        , chr(34) & WScript.ScriptFullName & chr(34) & " /elevate", "", "runas", 1
        WScript.Quit
    End If
End Sub
'-------------------------------------------------------------------------------------------------------

CodePudding user response:

I used & to connect 2 paths with spaces and it worked well for me:

startupShortcutPath = "C:\ProgramData\Microsoft\Windows\" & "\Start Menu\Programs\MyApplication\MyApplication.lnk"
  • Related