Hallo, ich habe ungefähr 122 Ordner mit EXE-Dateien, die alle dem Namen des Ordners entsprechen. Gibt es eine Möglichkeit, ein Skript zu schreiben, um eine Verknüpfung für jede EXE-Datei in den Ordnern und ohne das Tag „Verknüpfung“ zu erstellen? Ich versuche einfach, es mit einigen cleveren Skripten nicht 1 nach 1 manuell machen zu müssen …
Antwort1
rem must be run in a window with admin privileges
rem windows 10 cmd batch file to create a hard shortcut to all .exe files on a volume if placed in the root folder;
rem in a folder and all subfolders if not placed in the root folder. the shortcut is created in the folder where the .exe is.
rem the "shortcut" extension should not be part of the filename. the .lnk extension should be part of the filename.
rem links that already exist to .exe files should be deleted.
rem see mklink /? and https://ss64.com/nt/mklink.html
rem mklink saveShortcutAs targetOfShortcut
@echo off
setlocal enableextensions
rem begin turn off shortcut name extension
rem see https://www.tenforums.com/tutorials/4663-shortcut-name-extension-turn-off-windows-10-a.html
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" /V link /T REG_Binary /D 00000000 /F
Reg Delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates" /V ShortcutNameTemplate /F
taskkill /f /im explorer.exe
start explorer.exe
rem end turn off shortcut name extension
rem the following command deletes all links to .exe files.
FOR /f "tokens=*" %%a IN ('dir /b /s *.exe.lnk') DO del "%%a"
FOR /f "tokens=*" %%a IN ('dir /b /s *.exe') DO mklink /h "%%a.lnk" "%%a"
exit /b
siehe mklink /?
sehenss64.com mklink
siehe cmd /?
siehe /?
siehe dir /?
sehenss64.com für in do
sehenVerknüpfungsnamenerweiterung aus-/einschalten
sehenSymbolische Links, Hardlinks und Verzeichnisverbindungen in Windows 10
Erstellen Sie eine Windows 10-CMD-Batchdatei, die in einem Fenster mit Administratorrechten ausgeführt werden muss. Sie erstellt einen festen Link zu jeder EXE-Datei auf einem Datenträger, wenn diese im Stammordner abgelegt ist, und zu jeder EXE-Datei in einem Ordner und allen Unterordnern, wenn diese nicht im Stammordner abgelegt sind. Die Erweiterung „Verknüpfung“ sollte nicht Teil des Dateinamens sein. Die Erweiterung „LNK“ sollte Teil des Dateinamens sein. Bereits vorhandene Links zu EXE-Dateien sollten gelöscht werden.
Antwort2
Meine bevorzugte Methode zum Erstellen von Verknüpfungen besteht darin, ein temporäres VB-Skript im Batch zu erstellen. Ihre Lösung könnte ungefähr so aussehen:
@echo off
set "des=C:\Where\You\Want\The\Shortcuts"
set "src=C:\Root\Folder\Of\Executables"
setlocal enabledelayedexpansion
for /r "%src%" %%A in (*.exe) do (
set "exe=%%A"
set "name=%%~nA"
set "SCRIPT=%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
echo Set oWS = WScript.CreateObject^("WScript.Shell"^) >> !SCRIPT!
echo sLinkFile = "%des%\!name!.lnk" >> !SCRIPT!
echo Set oLink = oWS.CreateShortcut^(sLinkFile^) >> !SCRIPT!
echo oLink.TargetPath = "!exe!" >> !SCRIPT!
echo oLink.Save >> !SCRIPT!
cscript /nologo !SCRIPT!
del !SCRIPT!
)
Dadurch werden Variablen sowohl für den Speicherort Ihrer Verknüpfungen ( des
- also ob Sie sie in Ihrem %USERPROFILE%\Desktop
oder einem anderen Ordner haben möchten) als auch für den Speicherort Ihrer ausführbaren Dateien ( src
) festgelegt. Wir müssen dies tun, setlocal enabledelayedexpansion
damit wir Variablen in unserer For-Schleife verwenden können – das heißt: for
alle ausführbaren Dateien ( *.exe
) in unserem src
Verzeichnis, den vollqualifizierten Pfad der .exe als festlegen exe
und dann den Namen der .exe als festlegen name
(ohne Erweiterung). Der nächste Teil ist das VB-Skript – wir legen SCRIPT
eine zufällig benannte .vbs-Datei in unserem TEMP-Ordner als fest, geben dann unsere VBS-Befehle in dieses Skript aus, führen es aus und löschen es. Dies wird für jede Iteration Ihrer For-Schleife wiederholt, bis eine Verknüpfung für jede ausführbare Datei erstellt wurde.
Wichtige Hinweise zu den VBS-Zeilen: sLinkFile
bestimmt, wo Ihre Verknüpfung erstellt wird und wie sie heißt; oLink.TargetPath
verweist auf den vollständigen Pfad Ihrer ausführbaren Datei; für Variablen in der For-Schleife !
werden 's statt %
's verwendet; und wenn wir die Klammern in die VBS-Datei zurückgeben, müssen sie mit einem maskiert werden ^
. Hoffentlich bewirkt dies genau das, was Sie möchten – Sie müssen nur die Variablen des
und festlegen src
.
Antwort3
Ich kann nicht widerstehen, das zu postenPower ShellAusführung:
$TopFolder = 'C:\FolderWithExeSubfolders'
Get-ChildItem -Path $TopFolder -Filter *.exe -File -Recurse | ForEach-Object -Begin {
$WSHshell = New-Object -com wscript.shell
} -Process {
### Using the folder name as the base name for the shortcut. This allows you the
### option of giving the folder a "display name" to be used.
$NewLnkPath = '{0}\{1}.lnk' -f $_.DirectoryName, $_.Directory.Name
$NewShortcut = $WSHshell.CreateShortcut($NewLnkPath)
$NewShortcut.TargetPath = $_.FullName
### Optional
### $NewShortcut.Arguments = <string>
### $NewShortcut.Description = <string>
### $NewShortcut.Hotkey = <string>
### $NewShortcut.IconLocation = <string>
### $NewShortcut.WindowStyle = <1|2|7>
### $NewShortcut.WorkingDirectory = <string>
$NewShortcut.Save()
} -End {}