Sie können dieses PowerShell-Skript verwenden, das unter Windows 10 getestet wurde:
param ([string]$Source, [string]$Dest) Add-Type -AssemblyName Microsoft.VisualBasic Function ReplaceString($text, $original, $replacement) { [Microsoft.VisualBasic.Strings]::Replace($text, $original, $replacement, 1, -1, 'Text') } $Source = (Resolve-Path $Source).Path $Dest = (Resolve-Path $Dest).Path Function CopySubdir($subdirPath) { gci $subdirPath -Force | % { If (-not $_.PSIsContainer) { Copy-Item $_.FullName -Destination (ReplaceString $_.FullName $Source $Dest) } ElseIf ($_.LinkType -ne 'SymbolicLink') { $newFolderPath = (ReplaceString $_.FullName $Source $Dest) mkdir $newFolderPath CopySubdir $_.FullName } } } CopySubdir $Source gci $Source -Recurse -Force | ? {$_.LinkType -eq 'SymbolicLink'} | % { $newPath = (ReplaceString $_.FullName $Source $Dest) Push-Location $_.Parent.FullName $newTarget = (ReplaceString (Resolve-Path $_.Target).Path $Source $Dest) Pop-Location New-Item -Path $newPath -ItemType SymbolicLink -Target $newTarget }
Speichern Sie es als .ps1
Datei und befolgen Sie die Anweisungen zum Aktivieren von Skripts im PowerShell-Tag-Wiki . Sie können das Skript anschließend an einer PowerShell-Eingabeaufforderung wie folgt ausführen:
.\symcopy.ps1 -Source 'C:\my\source' -Dest 'D:\dest'
Es funktioniert auch mit relativen Pfaden, wie .\source
.
So führen Sie eine normale Eingabeaufforderung aus:
powershell -command ".\symcopy.ps1 -Source 'C:\my\source' -Dest 'D:\dest'"
Das Ziel sollte ein leerer Ordner sein, der den gleichen Inhalt wie der Quellordner erhält. Alle Dateien und Ordner werden wie üblich kopiert, aber alle Symbollinks werden überprüft und angepasst und später kopiert, sobald alle anderen Elemente vorhanden sind.
Einige Nachteile: Da Standardbenutzer unter normalen Bedingungen keine Symlinks erstellen können, muss dieses Skript als Administrator ausgeführt werden. ResourceExists
In der letzten Phase können einige Fehler ausgegeben werden. diese sind nicht fatal und können ignoriert werden.