(view source code of shortcut.vbs as plain text)
'Option ExplicitDim blnAllUsers, blnDelete, blnDesktop, blnDelTreeDim intValidArgsDim objFSO, objShortcut, wshShellDim strArgs, strDesktop, strIcon, strName, strPath, strPrograms, strShortcut, strWorkingDirblnAllUsers = False
blnDelete = False
blnDelTree = False
blnDesktop = False
strArgs = ""
strIcon = ""
strWorkingDir = ""
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
' OptionsWith WScript.Arguments.Named
intValidArgs = 0
If .Exists( "ARGS" ) And strArgs = "" Then
strArgs = Trim( .Item( "ARGS" ) )
intValidArgs = intValidArgs + 1
If strArgs = "" Then Syntax
End If
If .Exists( "DIR" ) And strWorkingDir = "" Then
strWorkingDir = .Item( "DIR" )
intValidArgs = intValidArgs + 1
If strWorkingDir = "" Then Syntax
If Not objFSO.FolderExists( strWorkingDir ) Then Syntax
End If
If .Exists( "ICON" ) And strIcon = "" Then
strIcon = .Item( "ICON" )
intValidArgs = intValidArgs + 1
If strIcon = "" Then Syntax
End If
If .Exists( "ALL" ) And blnAllUsers = False Then
blnAllUsers = True
intValidArgs = intValidArgs + 1
End If
If .Exists( "DEL" ) And blnDelete = False Then
blnDelete = True
intValidArgs = intValidArgs + 1
End If
If .Exists( "DESK" ) And blnDesktop = False Then
blnDesktop = True
intValidArgs = intValidArgs + 1
End If
If .Exists( "TREE" ) And blnDelTree = False Then
blnDelTree = True
intValidArgs = intValidArgs + 1
End If
If intValidArgs <> .Count Then Syntax
If blnDelTree And Not blnDelete Then Syntax
End With
' Name and targetWith WScript.Arguments.Unnamed
If .Count < 1 Or .Count> 2 Then Syntax
strName = .Item(0)
If .Count = 1 Then
If Not blnDelete Then Syntax
ElsestrPath = .Item(1)
If Not objFSO.FileExists( strPath ) And Not objFSO.FolderExists( strPath ) Then Syntax
End If
End With
Set wshShell = CreateObject( "Wscript.Shell" )
' All Users vs. current userIf blnAllUsers Then
strDesktop = wshShell.SpecialFolders( "AllUsersDesktop" )
strPrograms = wshShell.SpecialFolders( "AllUsersPrograms" )
ElsestrDesktop = wshShell.SpecialFolders( "Desktop" )
strPrograms = wshShell.SpecialFolders( "Programs" )
End If
If blnDesktop Then
strShortcut = objFSO.BuildPath( strDesktop, strName & ".lnk" )
ElsestrShortcut = objFSO.BuildPath( strPrograms, strName & ".lnk" )
End If
If blnDelete Then
With objFSOIf .FileExists( strShortcut ) Then .DeleteFile strShortcut, True
If blnDesktop Then
If blnDelTree Then RmDir strDesktop, Mid( .GetParentFolderName( strShortcut ), Len( strDesktop ) + 2 )
ElseIf blnDelTree Then RmDir strPrograms, Mid( .GetParentFolderName( strShortcut ), Len( strPrograms ) + 2 )
End If
End With
ElseIf blnDesktop Then
MkDir strDesktop, strName
ElseMkDir strPrograms, strName
End If
Set objShortcut = wshShell.CreateShortcut( strShortcut )
objShortcut.TargetPath = strPath
objShortcut.Arguments = strArgs
objShortcut.WindowStyle = 1
objShortcut.IconLocation = strIcon
objShortcut.WorkingDirectory = strWorkingDir
objShortcut.Save
End If
Set objShortcut = Nothing
Set wshShell = Nothing
Set objFSO = Nothing
Sub MkDir( myStartpath, mySubDirTree )
Dim arrTree, i, objFSO, strNewDir, strSubDirTreeIf InStr( mySubDirTree, "\" ) > 0 Then
arrTree = Split( mySubDirTree, "\" )
If Not IsArray( arrTree ) Then Exit Sub
If UBound( arrTree ) = 0 Then Exit Sub
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
With objFSO strSubDirTree = myStartPathFor i = 0 To UBound( arrTree ) - 1
strSubDirTree = .BuildPath( strSubDirTree, arrTree(i) )
If Not .FolderExists( strSubDirTree ) Then .CreateFolder( strSubDirTree )
NextEnd With
Set objFSO = Nothing
End If
End Sub
Sub RmDir( myStartpath, mySubDirTree )
Dim arrTree, i, objFSO, objFolder, strFolder, strSubDirTreeSet objFSO = CreateObject( "Scripting.FileSystemObject" )
With objFSO strSubDirTree = mySubDirTreestrFolder = .BuildPath( myStartPath, strSubDirTree )
If .FolderExists( strFolder ) Then
Set objFolder = .GetFolder( strFolder )
If objFolder.Files.Count = 0 And objFolder.SubFolders.Count = 0 Then .DeleteFolder( .BuildPath( myStartpath, strSubDirTree ) )
DostrSubDirTree = Left( strSubDirTree, InStrRev( strSubDirTree, "\" ) - 1 )
strFolder = .BuildPath( myStartPath, strSubDirTree )
If .FolderExists( strFolder ) Then
Set objFolder = .GetFolder( strFolder )
If objFolder.Files.Count = 0 And objFolder.SubFolders.Count = 0 Then
.DeleteFolder( .BuildPath( myStartpath, strSubDirTree ) )
ElseExit Do
End If
ElseExit Do
End If
Loop Until InStr( strSubDirTree, "\" ) < 1
End If
End With
Set objFolder = Nothing
Set objFSO = Nothing
End Sub
Sub Syntax Dim strMsg strMsg = vbCrLf _& "Shortcut.vbs, Version 1.00" _
& vbCrLf _& "Create, modify or delete shortcuts" _
& vbCrLf & vbCrLf _
& "Usage: Shortcut.vbs name path [ options ]" _
& vbCrLf & vbCrLf _
& " or: Shortcut.vbs name /DEL [ /TREE ]" _
& vbCrLf & vbCrLf _
& "Where: name name for the shortcut" _
& vbCrLf _& " path fully qualified path of the shortcut target" _
& vbCrLf _& " /DEL delete existing shortcut" _
& vbCrLf _& " /TREE also delete group(s) if empty" _
& vbCrLf _& "Options: /ARGS:""arguments"" arguments for the shortcut target" _
& vbCrLf _& " /DIR:""path"" working directory" _
& vbCrLf _& " /ICON:""file[,index]"" icon file and optional index" _
& vbCrLf _& " /ALL for All Users (default: current user)" _
& vbCrLf _& " /DESK shortcut on Desktop (default Programs)" _
& vbCrLf & vbCrLf _
& "Note: To use a shortcut in a Programs group, simply prefix the shortcut" _
& vbCrLf _& " name with the appropriate group name followed by a backslash." _
& vbCrLf & vbCrLf _
& "Example 1 (single command line, creates ""My shortcut.lnk"" in ""TestProg"" group):" _
& vbCrLf _& "SHORTCUT.VBS ""TestProg\My shortcut"" C:\WINDOWS\system32\notepad.exe" _
& vbCrLf _& " /ARGS:""D:\Test.txt"" /ICON:""C:\WINDOWS\system32\shell32.dll,130""" _
& vbCrLf _& "Example 2 (deletes the shortcut and group from the previous example again):" _
& vbCrLf _& "SHORTCUT.VBS ""TestProg\My shortcut"" /DEL /TREE" _
& vbCrLf & vbCrLf _
& "Written by Rob van der Woude" _
& vbCrLf _& "http://www.robvanderwoude.com"
WScript.Echo strMsg
WScript.Quit 1
End Sub
page last modified: 2025-10-11; loaded in 0.0075 seconds