הפורום כעת לקריאה בלבד, לקריאה נוספת.
איך מעתיקים קובץ ממיקום אחד לשני תוך שמירה על חלק מהנתיב | 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 הקבצים.

איך אני יכול להעתיק ולשמור על נתיב יחסי.
-
@אוריי משהו כזה עובד?
(לא בדקתי אם זה עובד)$updated | ForEach-Object { $dest = $folder2 + ($_.Path -replace $folder1) if (!(Test-Path -path $dest)) { New-Item $dest -Type Directory }) Copy-Item $updated.Path $dest -Force }@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 -
@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 }כמובן שיש לשנות את הנתיבים
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות