Wie erstellt man automatisch Soft Links in Windows?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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
W4SG3HTS13D4S4N 
Fragesteller
 21.11.2022, 15:29

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?

0
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
0