2015-05-04 19 views
25

Ich möchte, dass mein .bat-Skript (test.bat) eine Verknüpfung zu sich selbst erstellt, damit ich es in meinen Windows 8-Startordner kopieren kann.Wie erstelle ich eine Verknüpfung über die Befehlszeile in Windows?

Ich habe diese Codezeile geschrieben, um die Datei zu kopieren, aber ich habe noch keine Möglichkeit gefunden, die genannte Verknüpfung zu erstellen, da Sie sehen, dass es nur das Skript kopiert.

xcopy "C:\Users\Gabriel\Desktop\test.bat" "C:\Users\Gabriel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" 

Können Sie mir helfen?

+0

http://superuser.com/a/455398/48092 – Aivar

Antwort

24

Sie könnten einen PowerShell-Befehl verwenden. Halten Sie dies in Ihrem Batch-Skript, und es wird eine Verknüpfung zu %~f0 in %userprofile%\Start Menu\Programs\Startup erstellen:

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

Wenn Sie es vorziehen, nicht Powershell zu verwenden, Sie mklink verwenden könnte eine symbolische Verknüpfung zu machen. Syntax:

mklink saveShortcutAs targetOfShortcut 

Siehe mklink /? in einem Konsolenfenster für die vollständige Syntax und this web page für weitere Informationen.

in Batch-Skript zu tun:

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

Die Verknüpfung erstellt ist keine traditionelle LNK-Datei, aber es soll die gleiche trotzdem arbeiten. Beachten Sie, dass dies nur funktioniert, wenn die .bat-Datei von demselben Laufwerk wie Ihr Startordner ausgeführt wird. Außerdem sind anscheinend Admin-Rechte erforderlich, um symbolische Links zu erstellen.

+1

aah. + 1. Ich habe über mklink vergessen. Obwohl es auf Vista und darüber unterstützt wird (XP ist sowieso auf dem Weg zum Friedhof) und ist nicht so reich an Optionen. Powershell-Lösung ist viel besser :) – npocmaka

+2

Ja, aber Powershell wird eine Sekunde Pause verursachen, wenn es noch nicht für die aktuelle Windows-Sitzung vorbereitet wurde. Ihre Lösung "ShortcutJS.bat" sollte schneller sein. – rojo

+1

Ich denke, dass die Mklink-Lösung genug für das aktuelle Projekt, das ich mache, sehe ich nicht die Notwendigkeit für eine bessere, aber komplexere Befehl. Aber ich muss etwas umgehen: * Admin-Rechte *. Gibt es eine Möglichkeit, Benutzerrechte in mklink zu konfigurieren? – Maslor

11

Kann nicht mit reinem batch.Check die shortcutJS.bat getan werden - es ist ein jscript/bat Hybrid- und sollte mit .bat Erweiterung verwendet werden:

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

Mit -help können Sie die anderen Optionen prüfen (Sie Symbol festlegen, admin Berechtigungen und usw.)

+1

Großartig, es funktioniert sehr gut. Ich denke, es ist besser als Mlink-Methode. Ich verwende "ShortcutJs.bat", um eine Verknüpfung für eine .pyw-Datei zu erstellen. Die Verknüpfung funktioniert genauso wie die manuell erstellte Verknüpfung. Wenn Sie jedoch auf den von mklink erstellten Link doppelklicken, kann pythonw.exe nicht automatisch zur Ausführung der .pyw-Datei gefunden werden. – lengxuehx

1

Ich präsentiere ein kleines Hybridskript [BAT/VBS], um eine Desktopverknüpfung zu erstellen. Und Sie können es natürlich zu Ihrem Zweck ändern.

@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 
::******************************************************************************************** 
1

Der beste Weg ist, diese Batch-Datei auszuführen. offene Notizblock und Typ: -

@echo off 
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs 
echo sLinkFile = "GIVETHEPATHOFLINK.lnk" >> CreateShortcut.vbs 
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs 
echo oLink.TargetPath = "GIVETHEPATHOFTARGETFILEYOUWANTTHESHORTCUT" >> CreateShortcut.vbs 
echo oLink.Save >> CreateShortcut.vbs 
cscript CreateShortcut.vbs 
del CreateShortcut.vbs 

Speichern unter Dateiname.bat (Vorsicht beim Speichern wählen alle Dateitypen) funktionierte gut in Win XP.

3

Rohit Sahus Antwort funktionierte am besten für mich in Windows 10. Die PowerShell-Lösung lief, aber keine Verknüpfung erschien. Die JScript-Lösung gab mir Syntaxfehler. Ich habe mklink nicht probiert, da ich mich nicht mit Berechtigungen anlegen wollte.

Ich wollte die Verknüpfung auf dem Desktop angezeigt werden. Aber ich musste auch das Symbol, die Beschreibung und das Arbeitsverzeichnis festlegen. Beachten Sie, dass MyApp48.bmp ein 48 x 48-Pixel-Bild ist. Hier ist meine mod von Rohit Lösung:

@echo off 
cd c:\MyApp 
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs 
echo sLinkFile = "%userprofile%\Desktop\MyApp.lnk" >> CreateShortcut.vbs 
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs 
echo oLink.TargetPath = "C:\MyApp\MyApp.bat" >> CreateShortcut.vbs 
echo oLink.WorkingDirectory = "C:\MyApp" >> CreateShortcut.vbs 
echo oLink.Description = "My Application" >> CreateShortcut.vbs 
echo oLink.IconLocation = "C:\MyApp\MyApp48.bmp" >> CreateShortcut.vbs 
echo oLink.Save >> CreateShortcut.vbs 
cscript CreateShortcut.vbs 
del CreateShortcut.vbs 
+0

Ich wollte eine sehr einfache Lösung für ein sehr einfaches Problem und ich habe es bereits gegeben. Ich habe versucht, nur BAT, nicht Visual Basic zu verwenden. – Maslor

+1

Aber danke für die Antwort! Könnte einem anderen helfen, der hier nach Lösungen sucht. – Maslor

+0

Ich hatte Probleme beim Abrufen des Desktop-Pfads in einem Terminalserver, auf dem Benutzer den benutzerdefinierten Desktopspeicherort verwenden. Um dies zu beheben, musste ich den Desktop-Speicherort aus der Registrierung lesen. 'Set objShell = Create ("WScript.Shell") strRegDesktopPath = objShell.RegRead ("HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Currentversion \ Explorer \ User Shell Folders \ Desktop") desktopPath = objShell.ExpandEnvironmentStrings (strRegDesktopPath) Setzen Sie oWS = WScript.CreateObject ("WScript.Shell") sLinkFile = desktopPath & "\ MyApp.lnk" ' –

2

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 

Befehl

C:\dir>link.vbs ..\shortcut.txt.lnk target.txt 
Verwandte Themen