Wie erstellt man automatisch Soft Links in Windows?
Ich brauche ein Skript, das ein Laufwerk durchsucht und eine Verknüpfung erstellt, wenn sich eine .JPG-Datei in einem Ordner mit dem Namen „Export” befindet.
Die Verknüpfungen sollen alle am gleichen Ort gespeichert werden.
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Batch, cmd, PowerShell
mal Quick&Dirty ein Powershellscript:
Demo.ps1
function Create-ShortCut{
param(
[Parameter(Mandatory=$true)] [string]$Target,
[Parameter(Mandatory=$false)] [string]$LinkName="$Target.lnk"
)
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($LinkName)
$Shortcut.TargetPath = $Target
try{
$Shortcut.Save()
Write-Host saved: $LinkName -fo yellow
}
catch{Write-Error "Access denied."}
}
$BasePath = 'c:\' #Pfad welcher recursiv nach einem Ordner Namens 'Export' durchsucht werden soll
#2Stufig: Suche erstmal Ordner mit Namen Export
Get-ChildItem 'c:\' -Include 'Export' -Directory -Recurse -ErrorAction SilentlyContinue|
ForEach-Object{
Write-Host Ordner Gefunden : $_.FullName -fo green
#suche im gefundenen Ordner alle jpg-Dateien
Get-ChildItem $_.FullName -Filter '*.jpg' -File -ErrorAction SilentlyContinue|
ForEach-Object{
Create-ShortCut $_.FullName #erzeuge Verknüpfung
}
}
pause
Das script nimmt keine Rücksicht darauf ob es mehrere (Unter)Ordner mit dem Namen Export auf dem Laufwerk gibt. Egal wo sich ein solcher Ordner mit jpg darin befindet, es werden Verknüpfungen erzeugt.
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel
22.11.2022, 06:19
@W4SG3HTS13D4S4N
gleiche Nummer, nur mit verschieben statt erzeugen...
$BasePath = 'c:\users' #Pfad welcher recursiv nach einem Ordner Namens 'Export' durchsucht werden soll
$DestinationPath='E:\Test'
New-Item $DestinationPath -ItemType Directory -Force >$Null #Fall Zielordner nicht existiert diesen erzeugen
Get-ChildItem $BasePath -Include 'Export' -Directory -Recurse -ErrorAction SilentlyContinue|
ForEach-Object{
Write-Host Ordner Gefunden : $_.FullName -fo green
#suche im gefundenen Ordner alle jpg.lnk-Dateien
Get-ChildItem $_.FullName -Filter '*.jpg.lnk' -File -ErrorAction SilentlyContinue|
Move-Item -Destination $DestinationPath #verschieben
}
pause
natürlich kannst du die verknüpfungen auch gleich am Zielort speichern...
function Create-ShortCut{
param(
[Parameter(Mandatory=$true)] [string]$Target,
[Parameter(Mandatory=$false)] [string]$LinkName="$Target.lnk"
)
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($LinkName)
$Shortcut.TargetPath = $Target
try{
$Shortcut.Save()
Write-Host saved: $LinkName -fo yellow
}
catch{Write-Error "Access denied."}
}
$BasePath = 'c:\users'
$DestinationPath='E:\Test'
New-Item $DestinationPath -ItemType Directory -Force >$Null
Get-ChildItem $BasePath -Include 'Export' -Directory -Recurse -ErrorAction SilentlyContinue|
ForEach-Object{
Write-Host Ordner Gefunden : $_.FullName -fo green
Get-ChildItem $_.FullName -Filter '*.jpg' -File -ErrorAction SilentlyContinue|
ForEach-Object{
Create-ShortCut $_.FullName "$DestinationPath\$($_.Name).lnk"
}
}
pause
Vielen Dank, das ist genau so, wie ich es haben wollte :) was muss eingegeben werden, damit nun alle Verknüpfungen in einen anderen Pfad verschoben werden? Zum Beispiel Laufwerk E?