Wie kann ich mit der CMD eine verknüpfung erstellen?

flauski  29.05.2022, 21:15

Läuft das auf ne Batch hinaus?

Ironfist209 
Fragesteller
 29.05.2022, 21:18

alle möglichen dateien oder ordner

flauski  29.05.2022, 21:19

Ich verstehe leider noch nicht, was Du und vor allem warum Du es machen willst. Magst Du Dein Problem daher ausführlicher beschreiben?

Ironfist209 
Fragesteller
 29.05.2022, 21:41

Ich möchte mit der cmd eine Verknüpfung erstellen wie im Explorer.

flauski  29.05.2022, 21:45

Automatisiert jedes mal von Hand, wie soll die Prozedur aussehen?

Ironfist209 
Fragesteller
 29.05.2022, 21:48

Ich öffne die cmd gehe zur Datei und dann möchte ich eine Verknüpfung erstellen.

flauski  29.05.2022, 21:52

Ähm, willst Du wissen, ob es geht und das ist nur ein einmaliges Experiment oder wirklich produktiv nutzen?

Glaub mir, die Frage hat seinen Sinn.

Ironfist209 
Fragesteller
 29.05.2022, 22:00

Ich möchte wissen wie es geht um es dann auch anzuwenden

2 Antworten

Mit dem direkten Eingeben des dazu nötigen Codes könnte die Sache ziemlich heftig werden. Es gibt in Cmd/Batch kein direktes Kommando zum erstellen von Desktopshortcuts. Dazu benötigt man eine systemnahe Sprache wie VB-/JavaScript oder Powershell etc.

Ein Desktopshortcut enthält mehr Informationen als nur den Namen der Datei, auf welche weitergeleitet werden soll:

  • ZielProgramm für den Shortcut
  • optional: Icondatei,Iconindex
  • optional: ArbeitsVerzeichnis
  • optional: Anmerkungen
  • optional: Tastenkombination
  • optional: Fenstemodus

im folgenden Script werden weitere Optionen, wie:

  • Adminrechte
  • Kompatibilitätsmodi

...nicht berücksichtigt, da diese nur über binäre Manipulation innerhalb der .lnk-Datei gesetzt werden können.

shortCut Demo.cmd

@echo off
chcp 65001 >nul
  rem Wenn das Script noch nicht existiert erzeuge  es im Temp-Ordner
if not exist "%temp%\CreateShortCut.js" echo args=WScript.Arguments;if (args.length^>7){ShCt=new ActiveXObject('WScript.Shell').CreateShortcut(args(0));ShCt.TargetPath=args(1);ShCt.Arguments=args(2).replace(/'/g,String.fromCharCode(34));if(args(3).match(/^^.+$/)){ShCt.IconLocation=args(3)};ShCt.WorkingDirectory=args(4);ShCt.Description=args(5);ShCt.HotKey = args(6);if(args(7).match(/^^\d$/)){ShCt.WindowStyle=args(7)};ShCt.Save()};>"%temp%\CreateShortCut.js"

  rem Parameter: "Shortcut-Datei" "ZielProgramm für den Shortcut" "[optional:Argumente  !!!innere "Gänsefüßchen nicht möglich"!!!]"  "[optional:Icondatei,iconindex]" "[optional:ArbeitsVerzeichnis]" "[optional:Anmerkungen]" "[optional:Tastenkombination (aus:ALT+,CTRL+,SHIFT+,A..Z,0..9,Back,Tab,Clear,Return,Escape,Space,Prior)]" "[optional:Fenstemodus (3=Maximiert,4=normal oder 7=minimiert)]"
  rem Es müssen immer 7 Werte angegeben werden! Leere Werte/default mit "" angeben.
  rem Argumente, welche normalerweise  in "Gänsefüßchen" übergeben würden, stattdessen in 'SingleQuotes' schreiben! zB. "Argument1 'Agument in normalerweise Gänsefüßchen' usw."
  rem Icon-Indexe  für Shell32.dll: https://diymediahome.org/windows-icons-reference-list-with-details-locations-images/
cscript //nologo "%temp%\CreateShortCut.js" "%userprofile%\Desktop\CMD Max.lnk" "cmd" "/t:1f /k echo Hallo %username%" "" "" "startet cmd maximiert" "CTRL+Alt+M" "3" 

pause
exit /b

Die folgende Batch erzeugt einfach für die als Parameter übergebene Datei einen Default-Shortcut.

createShortCut.cmd

@echo off
chcp 65001 >nul
if "%~1"=="" (
    echo Diese Batch ist ein Droptarget.
    echo ...und ziehe eine Datei auf diese Batch "%~nx0"
    echo ... Aufruf:
    echo "%~nx0"  "[Pfad]DateiName"
    Timeout 5 >nul
    exit /b
)
if not exist "%temp%\CreateShortCut.js" echo args=WScript.Arguments;if (args.length^>7){ShCt=new ActiveXObject('WScript.Shell').CreateShortcut(args(0));ShCt.TargetPath=args(1);ShCt.Arguments=args(2).replace(/'/g,String.fromCharCode(34));if(args(3).match(/^^.+$/)){ShCt.IconLocation=args(3)};ShCt.WorkingDirectory=args(4);ShCt.Description=args(5);ShCt.HotKey = args(6);if(args(7).match(/^^\d$/)){ShCt.WindowStyle=args(7)};ShCt.Save()};>"%temp%\CreateShortCut.js"

cscript //nologo "%temp%\CreateShortCut.js" "%~dpn1.lnk" "%~nx1" "" "" "" "" "" "" 
exit /b

Aufruf in der Console:

createShortCut.cmd  "Datei"

Du kannst natürlich auch einfach die Datei auf die Batch ziehen. DropTarget.

"%temp%\CreateShortCut.js" nochmal in "Schönschrift" und kommentiert

args=WScript.Arguments;
 //sicherstellen das alle Argumente gesetzt sind
if (args.length>7){
  ShCt=new ActiveXObject('WScript.Shell').CreateShortcut(args(0));
  ShCt.TargetPath=args(1);
  ShCt.Arguments=args(2).replace(/\'/g,String.fromCharCode(34)); //statt Argumenten in "DoubleQuotes" übergeben wir diese in 'Singlequotes' und ersetzen diese dezent durch "". (ist eine elende Krücke, aber bequem)
  if(args(3).match(/^.*$/)){ShCt.IconLocation=args(3)};
  ShCt.WorkingDirectory=args(4);
  ShCt.Description=args(5);
  ShCt.HotKey = args(6);
  if(args(7).match(/^\d$/)){ShCt.WindowStyle=args(7)}; //wenn Ziffer
  ShCt.Save();
}
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

OK, dann machen wir es kurz. Mir fällt nur ein Weg ein und das ist über VBscript. Und das ist nur praktikabel, wenn man es einmal als Batch runterschreibt und dann nutzt. Das jedes mal von Hand eintippen tut sich wahrscheinlich niemand freiwillig an.

Daher ja es ist möglich, aber für eine Nutzung so unpraktikabel.