איך מעתיקים קובץ ממיקום אחד לשני תוך שמירה על חלק מהנתיב | Powershall
-
בניתי סקריפט של גיבוי קבצים (מבקש ומתחנן אנא אל תציעו לי תוכנות גיבוי זה לא מה שאני מחפש...)
הקוד כדלהלן$folder1 = "X:\Test\" $folder2 = "X:\MyBackup\Test\" $folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5 $folder2Items = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5 $changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual $updated = $changes | Where-Object {$_.SideIndicator -eq "<="} Copy-Item $updated.Path $folder2 -Recurse -Force
הקוד עובד מעולה אבל אני רוצה לשמור על נתיבים יחסיים.
זה צילום של קובץ המקור
"X:\Test\"
וזה תיקיית המשנה uri
וזה תיקיית היעד
"X:\MyBackup\Test\"
הקוד העתיק לי ולא יצר לי תיקייה בשם uri והעתיק לשם את 2 הקבצים.
איך אני יכול להעתיק ולשמור על נתיב יחסי.
-
@yossiz כתב באיך מעתיקים קובץ ממיקום אחד לשני תוך שמירה על חלק מהנתיב | Powershall:
@אוריי משהו כזה עובד?
(לא בדקתי אם זה עובד)$updated | ForEach-Object { $dest = $folder2 + ($_.Path -replace $folder1) if (!(Test-Path -path $dest)) { New-Item $dest -Type Directory }) Copy-Item $updated.Path $dest -Force }
מחזיר שגיאה כבר בשורה הזו
$dest = $folder2 + ($_.Path -replace $folder1)
פלט של שורה בודדת (לאחר הרצת כל הקוד שלפני)
PS X:\test> $dest = $folder2 + ($_.Path -replace $folder1) The regular expression pattern X:\Test\ is not valid. At line:1 char:1 + $dest = $folder2 + ($_.Path -replace $folder1) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (X:\Test\:String) [], RuntimeException + FullyQualifiedErrorId : InvalidRegularExpression
-
לתועלת הציבור הקוד הזה עובד מעולה
$folder1 = "X:\Test" $folder2 = "X:\MyBackup\Test" $folder1Items = Get-ChildItem $folder1 -Recurse | Get-FileHash -Algorithm MD5 $folder2Items = Get-ChildItem $folder2 -Recurse | Get-FileHash -Algorithm MD5 $changes = Compare-Object $folder1Items $folder2Items -Property Name, Path -IncludeEqual $updated = $changes | Where-Object {$_.SideIndicator -eq "<="} $updated | ForEach-Object { $ww = (Get-Item $_.Path).DirectoryName.replace($folder1,$folder2) if (!(Test-Path -path $ww)) { New-Item $ww -Type Directory } Copy-Item $_.Path $ww -Force }
כמובן שיש לשנות את הנתיבים