העתק לדיסק און קי, רק קבצים חדשים - RoboCopy

exprexs

Member
הפקודה הבאה, רשומה עם הסוויצ'ים התואמים כך שרק קבצים חדשים יועתקו אל הדיסק און קי.
קבצים זהים ו/או ישנים בתיקיית המקור, לא יועתקו.
המקור, מחיצה D.
היעד, מחיצה E.
החריג להעתקה, כל קבצי ה ZIP שקיימים בתיקיית המקור, אייקונים וקיצורי דרך.


RoboCopy "D:" "E:" /XO /XF *zip *ico *lnk


מסתבר שיש באג עם הפקודה ROBOCOPY.
כשמעתיקים תיקיות ב"שורש" המחיצה ( כמו D ) לתיקייה כלשהי ( שאיננה תיקיית שורש למחיצה), תיקיית היעד הופכת ל"נסתרת".
הבאג איננו קיים בהעתקה משורש מחיצה אחת למשנתה.
הדרך היחידה לבטל את התופעה בה תיקיית היעד הופכת ל"נסתרת" היא להוסיף לפקודה את הסוויץ' הבא -

A-:SH/
עוד גיליתי שניתן להפוך את התיקייה שבטעות הפכה לנסתרת, לתיקייה "גלויה".
זאת בעזרת העתקה חוזרת של פק' רובוקופי עם הסוויצ'ים האלו שצוינו לעיל. [ A-:SH/ ].

RoboCopy "D:" "E:SOME_FOLDER" / A-:SH
פרט נוסף -
ללא סוויצ'ים, רובוקופי איננה מעתיקה תת תיקיות וגם לא את תכולתן.
רובוקופי לא מקבלת "לוכסן" בקצה נתיב יעד המקור או קצה נתיב יעד ההעתקה. קיומו של לוכסן כזה מעלה הודעת שגיאה.

בכל שגיאת רישום ביעד ההעתקה, נוצרת תיקייה חדשה, לרוב "נסתרת".
התופעה הזו, איננה מלווה בשום הודעת שגיאה בכלל.
התופעה הלא רצויה הזאת, עלולה לחול בעיקר בנתיבי יעד-העתקה ארוכים במיוחד. לא ניתן למנוע זאת בעזרת סוויץ' מכל סוג.
פרט זה, איננו חזרה על האמור קודם בעניין העתקת תכולת "תיקייה שורשית", אלא המדובר על "שגיאת רישום" ביעד ההעתקה.

הסוויצ'ים הבאים, מבטלים כל ניסיון חוזר להעתקה, לאחר הינתן שגיאה מכל סוג.

R:0 /W:0 /
 
נערך לאחרונה ב:

exprexs

Member
במחיצה D, קיימות תיקיות נסתרות שאינן רצויות להעתקה.
על כן יש להחריג אותן.

RoboCopy “D:” “E:” /XO /XF *lnk /XD $Rec* Sys* /R:0 /W:0 /MT /E /A-:SH
הפקודה הבאה, מחריגה כל תיקייה מכל סוג
RoboCopy “D:” “E:” /XO /XD * /R:0 /W:0 /MT /E /A-:SH
 
נערך לאחרונה ב:

exprexs

Member
רשום את הקבצים הרצויים ואל תעתיק אותם. סוויץ' L/
המדובר בסוויץ' רישום -בדיקה בלבד והכל ללא שום פעולת העתקה או הזזה.
האפשרות הזו עשויה להועיל לטעמי בירור לפני ביצוע העתקה.

RoboCopy "E:\folder1" "E:\folder2" "*" /L
 
נערך לאחרונה ב:

exprexs

Member
הזז רק קבצים בפק' RoboCopy , סוויץ' Mov/ ו סוויץ' Move/ .

פק' RoboCopy תומכת בהעברת קבצים / הזזת קבצים באופן שאיננו נתמך בפקודות אחרות.

הוספתי כאן את הסוויץ' L/ כדי שהפקודה תעבוד רק במצב תרגול.

הזז קבצים והותר תיקיית המקור במקומה - סוויץ' Mov/

RoboCopy "E:\folder1" "E:\folder2" "*" /Mov /L
הזז רק קבצים חדשים והותר את תיקיית המקור במקומה.
RoboCopy "E:\folder1" "E:\folder2" "*" /XO /XD * /R:0 /W:0 /MT /E /A-:SH /Mov /L


סוויץ' Move/

הסוויץ' לעיל פועל באופן דומה לקודמו, אלא שזה מוחק גם תיקיית המקור.
 

exprexs

Member
שלב את RoboCopy בתסריט PowerShell
העתק קבצים ( מקור יחיד ).
התסריט בודק קיומה של תיקיית היעד כתנאי סף, וממשיך.
בהיעדר קיומה של תיקיית היעד, התסריט מסתיים מיד.


קוד:
# Copy Items, Single Source. Test-Path
$Source = 'E:\folder1'
$Destination = 'E:\folder2'
$Name = '*'
$Arguments = @('/XO', '/XD', '*', '/R:0', '/W:0', '/MT', '/E', '/A-:SH', '/L')
$Execute = $Arguments | ? {$_ -ne '/L'}
$RoboCopy = 'C:\Windows\System32\Robocopy.exe'
$Check = Test-Path -Path $Destination
if ($Check -eq $true) {
$RoboCopyArgs = @($Source, $Destination, $Name) + $Arguments
& $RoboCopy @RoboCopyArgs
Write 'Would you like to continue with RoboCopy Execution Script? (Y/N)'
$Choice = Read-Host
if ($Choice -eq 'Y' -or $Choice -eq 'y') {
$RoboCopyExc = @($Source, $Destination, $Name) + $Execute
& $RoboCopy @RoboCopyExc
Write 'Robocopy Execution Completed Successfully.'
} else {
Write 'No action performed.'
}
} else {
Write 'Destination directory does not exist. Aborting.' ; Return
}
העתק קבצים ( ריבוי יעדי מקור )
התסריט בודק קיומה של תיקיית היעד כתנאי סף, וממשיך.
אם היעד איננו קיים, התסריט מסתיים מיד.

קוד:
# Copy Items, Multi Sources. Test-Path
$Source = @(
'E:\folder1',
'E:\folder3'
)
$Destination = 'E:\folder2'
$Name = '*'
$Arguments = @('/XO', '/XD', '*', '/R:0', '/W:0', '/MT', '/E', '/A-:SH', '/L')
$Execute = $Arguments | ? {$_ -ne '/L'}
$RoboCopy = 'C:\Windows\System32\Robocopy.exe'
$Check = Test-Path -Path $Destination
if ($Check -eq $true) {
foreach ($Src in $Source) {
$RoboCopyArgs = @($Src, $Destination, $Name) + $Arguments
& $RoboCopy @RoboCopyArgs }
Write 'Would you like to continue with RoboCopy Execution Script? (Y/N)'
$Choice = Read-Host
if ($Choice -eq 'Y' -or $Choice -eq 'y') {
foreach ($Src in $Source) {
$RoboCopyExc = @($Src, $Destination, $Name) + $Execute
& $RoboCopy @RoboCopyExc }
Write 'Robocopy Execution Completed Successfully.'
} else {
Write 'No action performed.'
}
} else {
Write 'Destination directory does not exist. Aborting.' ; Return
}
#

 
נערך לאחרונה ב:

exprexs

Member
הארגומנטים השונים בתסריט, ניתנים להתאמה אישית לפי הצורך.
לדוגמא, ניתן להחריג את התיקיות הלא רצויות על פי שמן, ולהכליל את כל התיקיות האחרות.
יש להקפיד על גרש ו פסיק לגבי כל ארגומנט ושם קובץ/תיקייה ( פסיק, למעט הימני ביותר בסוגריים ).
ניתן להחסיר ארגומנטים או להחליף אותם.
לדוגמא

קוד:
$Arguments = @('/XO', '/XD', '$Rec*', 'Sys*', '/R:0', '/W:0', '/MT', '/E', '/A-:SH', '/L')
$Execute = $Arguments | ? {$_ -ne '/L'}
$Execute = $Arguments -Replace '/L', '/Mov'
ניתן להוסיף ארגומנטים כ"הוספת מערך".
לא ניתן להחסיר ארגומנטים בדרך דומה.

קוד:
$Arguments = $Execute + @('/L')
-
$ExportList = $Arguments + @( '/Log:C:\Logs\Backup.log' )
 
נערך לאחרונה ב:
למעלה