Windows 10'da test edilen bu PowerShell betiğini kullanabilirsiniz:
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
}
Olarak kaydet .ps1
dosyalayın ve içindeki Scriptleri Etkinleştirme talimatlarını izleyin. PowerShell etiketi wiki . Daha sonra komut dosyasını şunun gibi bir PowerShell isteminden çalıştırabilirsiniz:
.\symcopy.ps1 -Source 'C:\my\source' -Dest 'D:\dest'
Göreceli yollarla da çalışır, .\source
.
Normal bir komut isteminden çalıştırmak için:
powershell -command ".\symcopy.ps1 -Source 'C:\my\source' -Dest 'D:\dest'"
Hedef, kaynak klasörle aynı içerikleri alacak olan boş bir klasör olmalıdır. Tüm dosyalar ve klasörler her zamanki gibi kopyalanacak, ancak tüm sembolikler her şey yerine getirildikten sonra incelenecek ve ayarlanacak ve kopyalanacaktır.
Bazı uyarılar: Standart kullanıcılar normal şartlar altında sembolik bağlantılar oluşturamadığından, bu komut dosyasının yönetici olarak çalıştırılması gerekir. Bazı ResourceExists
son aşamada hatalar atılabilir; bunlar ölümcül değildir ve göz ardı edilebilir.