How do I create a shortcut via command-line in Windows?

后端 未结 9 781
忘掉有多难
忘掉有多难 2020-11-28 04:17

I want my .bat script (test.bat) to create a shortcut to itself so that I can copy it to my windows 8 Startup folder.

I have written this line of code to copy the f

相关标签:
9条回答
  • 2020-11-28 04:53

    You could use a PowerShell command. Stick this in your batch script and it'll create a shortcut to %~f0 in %userprofile%\Start Menu\Programs\Startup:

    powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Start Menu\Programs\Startup\%~n0.lnk');$s.TargetPath='%~f0';$s.Save()"
    

    If you prefer not to use PowerShell, you could use mklink to make a symbolic link. Syntax:

    mklink saveShortcutAs targetOfShortcut
    

    See mklink /? in a console window for full syntax, and this web page for further information.

    In your batch script, do:

    mklink "%userprofile%\Start Menu\Programs\Startup\%~nx0" "%~f0"
    

    The shortcut created isn't a traditional .lnk file, but it should work the same nevertheless. Be advised that this will only work if the .bat file is run from the same drive as your startup folder. Also, apparently admin rights are required to create symbolic links.

    0 讨论(0)
  • 2020-11-28 04:57

    I present a small hybrid script [BAT/VBS] to create a desktop shortcut. And you can of course modifie it to your purpose.

    @echo off
    mode con cols=87 lines=5 & color 9B
    Title Shortcut Creator for your batch and applications files by Hackoo 2015
    Set MyFile=%~f0
    Set ShorcutName=HackooTest
    (
    echo Call Shortcut("%MyFile%","%ShorcutName%"^)
    echo ^'**********************************************************************************************^)
    echo Sub Shortcut(ApplicationPath,Nom^)
    echo    Dim objShell,DesktopPath,objShortCut,MyTab
    echo    Set objShell = CreateObject("WScript.Shell"^)
    echo    MyTab = Split(ApplicationPath,"\"^)
    echo    If Nom = "" Then
    echo    Nom = MyTab(UBound(MyTab^)^)
    echo    End if
    echo    DesktopPath = objShell.SpecialFolders("Desktop"^)
    echo    Set objShortCut = objShell.CreateShortcut(DesktopPath ^& "\" ^& Nom ^& ".lnk"^)
    echo    objShortCut.TargetPath = Dblquote(ApplicationPath^)
    echo    ObjShortCut.IconLocation = "Winver.exe,0"
    echo    objShortCut.Save
    echo End Sub
    echo ^'**********************************************************************************************
    echo ^'Fonction pour ajouter les doubles quotes dans une variable
    echo Function DblQuote(Str^)
    echo    DblQuote = Chr(34^) ^& Str ^& Chr(34^)
    echo End Function
    echo ^'**********************************************************************************************
    ) > Shortcutme.vbs
    Start /Wait Shortcutme.vbs
    Del Shortcutme.vbs
    ::***************************************Main Batch*******************************************
    cls
    echo Done and your main batch goes here !
    echo i am a test 
    Pause > Nul
    ::********************************************************************************************
    
    0 讨论(0)
  • 2020-11-28 04:59

    I created a VB script and run it either from command line or from a Java process. I also tried to catch errors when creating the shortcut so I can have a better error handling.

    Set oWS = WScript.CreateObject("WScript.Shell")
    shortcutLocation = Wscript.Arguments(0)
    
    'error handle shortcut creation
    On Error Resume Next
    Set oLink = oWS.CreateShortcut(shortcutLocation)
    If Err Then WScript.Quit Err.Number
    
    'error handle setting shortcut target
    On Error Resume Next
    oLink.TargetPath = Wscript.Arguments(1)
    If Err Then WScript.Quit Err.Number
    
    'error handle setting start in property
    On Error Resume Next
    oLink.WorkingDirectory = Wscript.Arguments(2)
    If Err Then WScript.Quit Err.Number
    
    'error handle saving shortcut
    On Error Resume Next
    oLink.Save
    If Err Then WScript.Quit Err.Number
    

    I run the script with the following commmand:

    cscript /b script.vbs shortcutFuturePath targetPath startInProperty
    

    It is possible to have it working even without setting the 'Start in' property in some cases.

    0 讨论(0)
  • 2020-11-28 05:01

    link.vbs

    set fs  = CreateObject("Scripting.FileSystemObject")
    set ws  = WScript.CreateObject("WScript.Shell")
    set arg = Wscript.Arguments
    
    linkFile = arg(0)
    
    set link = ws.CreateShortcut(linkFile)
        link.TargetPath = fs.BuildPath(ws.CurrentDirectory, arg(1))
        link.Save
    

    command

    C:\dir>link.vbs ..\shortcut.txt.lnk target.txt
    
    0 讨论(0)
  • 2020-11-28 05:04

    Cannot be done with pure batch.Check the shortcutJS.bat - it is a jscript/bat hybrid and should be used with .bat extension:

    call shortcutJS.bat -linkfile "%~n0.lnk" -target  "%~f0" -linkarguments "some arguments"
    

    With -help you can check the other options (you can set icon , admin permissions and etc.)

    0 讨论(0)
  • 2020-11-28 05:11

    Nirsoft's NirCMD can create shortcuts from a command line, too. (Along with a pile of other functions.) Free and available here:

    http://www.nirsoft.net/utils/nircmd.html

    Full instructions here: http://www.nirsoft.net/utils/nircmd2.html#using (Scroll down to the "shortcut" section.)

    Yes, using nircmd does mean you are using another 3rd-party .exe, but it can do some functions not in (most of) the above solutions (e.g., pick a icon # in a dll with multiple icons, assign a hot-key, and set the shortcut target to be minimized or maximized).

    Though it appears that the shortcutjs.bat solution above can do most of that, too, but you'll need to dig more to find how to properly assign those settings. Nircmd is probably simpler.

    0 讨论(0)
提交回复
热议问题