Robocopy הוא אחד מהכליים בשורת הפקודה הנפוצים ביותר להעתקת נתונים במערכת הפעלה Windows. הוא כל כך פופולרי בגלל הכוח שלו. אך עם כל הכוח ישנה מסיבה מדורגת. במדריך זה, נפרט את כל המורכבות ונספק מדריך מלא על שימוש בכלי זה שימושי.
Robocopy הוא כלי שורת פקודה של Windows הזמין מאז Windows NT. זהו תחליף לכלי ההעתקה פחות גמיש xcopy. הוא מאפשר לך לציין נתיב של כונן או שרת להעתקה/הזזה של קבצים באמצעות שורת פקודה.
גרסת Robocopy כפי שכתוב כאן היא 10.0.18. זו הגרסה שבה ביצעתי את הבדיקות שלי.
Robocopy מספק כמה תכונות שניתן להשתמש בהן לביצוע העתקות קבצים והזזות מהירות ויעילות. הוא יכול:
- להעתיק קבצים דרך רשת עם אפשרות לשוב לעבוד אחרי הפסקה
- לדלג על נקודות חיבור NTFS שיכולות לגרום לכשל בדרך כלל מלולאות אינסופיות
- להעתיק מאפייני קובץ וספרייה ולשמור על חותמות זמן
- להעתיק אישורי NTFS, בעלים ומידע ניטור
- להעתיק חותמות זמן של ספריות
- להעתיק קבצים במצב 'גיבוי' כדי לוודא שהם מועתקים גם אם ההרשאות נדחו למנהל
- ניסיונות חוזרים אוטומטיים
- לסנכרן שני תיקיות
- מספיק חכם לדלג על קבצים שכבר הועתקו
- להעתיק נתיבים ארוכים מגבלת הנתיב של 256 תווים
- לבצע העתקות אסינכרוניות באמצעות יכולת הרצת תהליכים מרובים
- להחזיר קודי יציאה תקניים לשימוש בסקריפטים
כפי שאתה יכול לראות, ישנם הרבה דברים להעתיק. רציתי לכסות את כל מה שצריך לדעת על הכלי הנוח הזה.
מפתח תחביר הכללי של Robocopy
למה פוסט בלוג כה ארוך על יישומון יחיד? תראה את הטבלאות למטה. יש לך הרבה אפשרויות להעתיק או להעביר קבצים עם Robocopy! יש עוד אפשרויות בסעיפים המפורטים.
הטבלאות הללו נבנו מתחביר העזרה שמוחזר מ־robocopy /?
. הן נחלקו לסעיפים משמעותיים יותר, הוספו לאורך הזמן ונקיו כדי לספק מידע שימושי יותר.
אפשרויות מקור
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/S | Copy subfolders | |||
/E | Copy subfolders including empty subfolders | |||
/COPY:[DATSOU] | Copy options | /COPY:DAT | D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T) | |
/SEC | Copy files with SECurity | /COPY:DATS | ||
/DCOPY:T | Copy directory timestamps | |||
/COPYALL | Copy ALL file info | /COPY:DATSOU | This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit) | |
/NOCOPY | Copy NO file info | useful with /PURGE | ||
/A | Copy only files with the Archive attribute set | |||
/M | like /A, but remove Archive attribute from source files | |||
/LEV:n | Only copy the top n LEVels of the source tree | |||
/MAXAGE:n | MAXimum file AGE – exclude files older than n days/date | |||
/MINAGE:n | MINimum file AGE – exclude files newer than n days/date | If n < 1900 then n = no of days, else n = YYYYMMDD date | ||
/FFT | Assume FAT File Times | 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network. | ||
/256 | Turn off very long path (> 256 characters) support |
אפשרויות יעד
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/A+:[RASHCNET] | Set file attribute(s) on destination files + add | |||
/A-:[RASHCNET] | Remove file attribute(s) on destination files | |||
/FAT | Create destination files using 8.3 FAT file names only | |||
/CREATE | Create directory tree structure + zero-length files only | |||
/DST | Compensate for one-hour DST time differences |
אפשרויות העתקה
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/L | List files only | Don’t copy, timestamp or delete any files | ||
/MOV | Move files | Delete from source after copying | ||
/MOVE | Move files and directories | Delete from source after copying | ||
/sl | Copy file symbolic links instead of the target | |||
/Z | Copy files in restartable mode | Survive a network glitch | ||
/B | Copy files in backup mode | |||
/J | Copy using unbuffered I/O | Recommended for large files | ||
/NOOFFLOAD | Copy files without using the Windows copy offload mechanism | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | Copy any encrypted files using EFS RAW mode | |||
/TIMFIX | Fix file times on all files, even skipped files | |||
/XO | Exclude older | if destination file exists and is the same date or newer than the source – don’t bother to overwrite it. | ||
/XC | Exclude changed files | |||
/XN | Exclude newer files | |||
/XX | Exclude files present in destination but not source | /XX | ||
/XF file [file]… | Exclude files matching given names/paths/wildcards | |||
/XD dirs [dirs]… | Exclude directories matching given names/paths. | /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S | ||
/IA:[RASHCNETO] | Include files with any of the given attributes | |||
/XA:[RASHCNETO] | Exclude files with any of the given attributes | |||
/IM | Overwrite modified files. This includes the same files with different times. | |||
/IS | Overwrite files even if they are already the same | |||
/IT | Include tweaked files | |||
/XJ | Exclude junction points from source | /XJ | ||
/XJD | Exclude junction points from source directories | |||
/XJF | Exclude junction points from source files | |||
/MAX:n | Exclude files bigger than n bytes | |||
/MIN:n | Exclude files smaller than n bytes | |||
/MAXLAD:n | Exclude files unused since n | |||
/MINLAD:n | Exclude files used since n | If n < 1900 then n = n days, else n = YYYYMMDD date | ||
/MIR | Mirror a directory tree | /PURGE /E | ||
/PURGE | Delete dest files/folders that no longer exist in source | |||
/XL | Exclude files present in source but not destination | |||
/SECFIX | Robocopy /secfix fixes file security on all files, even skipped files. | Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC | ||
/ZB | Use restartable mode; if access denied use Backup mode |
אפשרויות מעקב
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/R:n | Number of retries on failed copies | /R:1000000 | Always try to set this option. I recommend setting this to 10-20 to not waste time retrying. | |
/W:n | Wait time between retries | /W:30 | Always try to set this option to a lower number to retry more quickly. I suggest 5-10. | |
/REG | Save /R:n and /W:n in the Windows registry as default settings | |||
/RH:hhmm-hhmm | times when new copies can be started | |||
/TBD | Wait for sharenames to be defined | retry error 67 | ||
/PF | Check run hours on a per file (not per pass) basis | |||
/MON:n | Run again when more than n changes seen | |||
/MOT:m | Run again in m minutes, if changed |
הבנת התנהגות Robocopy
I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.
I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.
Robocopy מעתיקה ומעבירה קבצים לפי תיקיות שלמות בלבד
כל העתקה של Robocopy תכיל תיקיית מקור ותיקיית יעד. Robocopy מעתיקה ומעבירה קבצים לפי תיקיות שלמות. לא ניתן להעתיק באופן מפורש קובץ יחיד באמצעות Robocopy. השתמש ב־copy
או ב־Copy-Item
של PowerShell לכך.
אף על פי כן, אפשר להעתיק קובץ יחיד באמצעות סינון המתאים שתלמד עליו למטה. כדי להעתיק קובץ יחיד באמצעות robocopy, יש לציין את תיקיית המקור ותיקיית היעד ולאחריהן את שם הקובץ בתיקיית המקור.
תחביר תלוי בסביבה
בנוסף, האפשרויות שאתה מציין ל־robocopy ילוו את הסביבה. תצטרך לענות על כמה שאלות כאשר תנסה להבין אילו אפשרויות להשתמש.
- האם תמיד תרצה להעתיק אל תיקייה ריקה?
- שאלה: האם ייתכן שקבצים כבר קיימים בתיקייה היעד?
- האם תעתיק טרה-בתים של נתונים או רק מספר מגהבתים?
- האם תעתיק קבצים ברשת או מקומית?
- …ועוד.
אם אין קבצים בתיקייה היעד, אין צורך לדאוג לאפשרויות שמחליפות קבצים. אם אין לך כוונה להעתיק קבצים ברשת, אין צורך לדאוג לאפשרויות אלו. הגדר במדויק את הנסיבות הנוכחיות ואת הסבלנות העתידית האפשרית של הסביבה שלך.
הכרז על אפשרויות ברירת המחדל
רובוקופי משתמשת בהרבה אפשרויות כברירת מחדל. ניתן לראות אותן בטבלאות למעלה. הוא מספק גם פלט שימושי בכל פעם שאתה מפעיל את הכלי.
ניתן לראות למטה שכאשר הרצתי את רובוקופי עם האפשרויות הבסיסיות ביותר (תיקיית המקור ותיקיית היעד), הוא באופן אוטומטי השתמש בכמה אפשרויות. הבנת ההתנהגות ברירת המחדל חשובה.
התייחס לאפשרויות שאתה רואה בפלט עם ההסברים למעלה ותבין בדיוק מה רובוקופי עושה מתחת למסכה.

הבנה מה יכולות הפקודות של רובוקופי
אם כבר השתמשת ב-copy
או ב-Copy-Item
של פוורשל, ייתכן שהגדרת מקור ויעד והמשכת בדרכך. אין הרבה אפשרויות שאתה יכול להגדיר שם. יש להם התנהגות ברירת מחדל.
אך רובוקופי, מצד שני, מבין הרבה יותר ונותן לך את הגמישות לעקוב אחרי התנהגותו ככל שתרצה.
זה חשוב לדעת ש-robocopy לא רק מכיר למושג של קובץ או ספרייה. יש הרבה יותר למערכת הקבצים ממנו, ו-robocopy תומך בכמעט כל דבר.
A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:
- a timestamp (written, modified and accessed)
- NTFS ACL
- בעלים
- מידע על ניטור NTFS
- דגל נסתר
- דגל שמור
כאשר אתה מעתיק או מעביר קובץ, יש לך את האפשרות להביא את כל זה יחד איתו, אם ברצונך.
הבנה שכאשר אתה מפעיל את robocopy, אתה לא רק מעתיק קובץ, אלא גם יתכן ואתה מעתיק איתו את כל המידע האחר. חשוב להבין ולקחת זאת בחשבון באפשרויות שאתה נותן ל-robocopy.
היסודות: ביצוע תרחישי WhatIf
אם יש לך שרת קבצים גדול במקום כלשהו שאתה רוצה להעביר ולא רוצה לקבוע פעולה עדיין, אתה יכול להשתמש ב-robocopy כדי לראות מה הוא היה עושה.
באמצעות האפשרות /L
, אתה יכול לספר ל-robocopy לרשום את כל הקבצים ו/או התיקיות שאתה מציין ולהחזיר רשימת קבצים שהוא היה יעתיק/יעביר.
אפשר להשתמש באפשרות /L
יחד עם כל אפשרות אחרת. זהו דרך נהדרת לקבל את כל האפשרויות שה-robocopy היה משתמש בהן (ברירת המחדל או לא). זה יקנה לך תמונה כללית של מה ש-robocopy יעשה בהתאם לאפשרויות שסיפקת לו.

/L
היסודות: העתקת קבצים
השימוש הבסיסי ביותר ב-robocopy הוא עם ספריית מקור ויעד ללא אפשרויות.
אפשרות זו תעתיק את כל הקבצים (למעט תת-תיקיות) מ-C:\src אל C:\dst.
אתה יכול גם להעתיק הכל כולל תת תיקיות (ריקות או לא) והרשאות NTFS. זהו, ממה שאני יכול להגיד, השיטה להעתיק באופן ממשי את כל מה שיש בספריית קבצים לספריית יעד.
למטה אני מעתיק את כל ה-ACLs של NTFS, בעלי הקבצים, תתי התיקיות (כולל תתי תיקיות ריקות) וכל התכונות של הקובץ. כל זה נעשה אפשרי רק עם האפשרות /E
לכלול את כל התיקיות הריקות ו־/COPYALL
לתפוס את שאר המידע.
היסודות: העברת קבצים
העברת קבצים מעבירה קבצים מתיקייה אחת לאחרת בדיוק כמו העתקה. ההבדל היחיד בין פעולת ההעברה לבין ההעתקה הוא שהקבצים המקוריים מוסרים לאחר ההעתקה.
כדי למחוק קבצים/תיקיות מהמקור לאחר העתקה, יש להשתמש באפשרות /MOV
. זה ימחק את כל הקבצים בתיקייה המסוימת (ללא תתי תיקיות).
באפשרותך גם להשתמש ב־/MOVE
כדי להעביר את כל הקבצים ותתי התיקיות.
היסודות: סנכרון קבצים
Robocopy מאפשר לך לסנכרן שתי תיקיות. זה אומר לוודא שכל הקבצים בתיקיית היעד נמצאים בתיקיית המקור ולא יותר. /MIR
ידמה העתקת נתונים ויעתיק את כל הקבצים בתיקיית המקור שלא נמצאים בתיקיית היעד וי ימחק קבצים בתיקיית היעד שלא נמצאים בתיקיית המקור. נזהר!
העתקת קבצים דרך רשת
אם אתה מעתיק קבצים דרך רשת, ישנם כמה אפשרויות שעליך לשקול.
Robocopy מאפשר לך להעתיק קבצים ב 'מצב אפשרות להתחלה מחדש' באמצעות האפשרות /Z
. זה אומר שאם קובץ מתחיל להעתיק ונכשל באמצע, ההעתקה יכולה להתחיל שוב במקום לנכשל לחלוטין. האפשרות /Z
שימושית כאשר הזרם מופסק ברשת.
אזהרה: יש מי שדיווח על כך ששימוש ב-
/Z
גורם להפחתת ביצועים ב- 1/4. תודיעו על הממצאים שלכם.
ניתן גם להשתמש באפשרות /FFT
. המתג הזה ידוע ביכולתו לשמור בדיוק יותר על חותמות זמן של קבצים בעת העברתם ברשת. אפשרות זו משתמשת בחותמות זמן של מערכת הקבצים FAT במקום NTFS.
שימוש ב- /IPG
לשליטה בפער בין חבילות
כאשר מעתיקים קבצים ברשת, אפשר להשתמש במתג /IPG
. המתג הזה ידוע גם בשם אפשרות הפער בין חבילות. אפשרות זו מגדירה (במילישניות) את תדירות המתנה שבה robocopy ימתין בין שליחת חבילות חדשות.
תמיד יש להשתמש בנתיבי UNC ולא באותיות כונן
A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.
מצב גיבוי של Robocopy (Robocopy /Z
)
Robocopy מציע אפשרות (/B
) או כמצב גיבוי למצב התחלה מחדש (/ZB
) שמעתיק קבצים במצב גיבוי. מה זה "מצב גיבוי" בכלל?
כאשר אתה מעתיק קובץ בדרך כלל ב- Windows ומתקל בקובץ שדורש הרשאות מנהל לגישה, תקבל שגיאה המציינת שאין לך הרשאה. למרות שאתה רץ כמנהל מקומי, Windows לא תאפשר לך לגשת אליו.
אזהרה: דיווחים על כרישות בנתונים של שרת מושבת כאשר נעתקים נתונים לשרת Windows Server 2016 עם הפונקציה לדיופליקציה מופעלת. בשימוש במתג
/ZB
תתקבל קובץ דוחף דדופים מושבת בתוך המידע של האמצעי. הקבצים שהועתקו לא יהיו קריאים ויגרמו לשגיאות בעת ניסיון לטפל בהם. קישור ל- Serverfault עם מידע נוסף.
מצב גיבוי הוא אופן לגשת לקבצים בלעדיים הקשורים להרשאות.
Robocopy משתמש במצב גיבוי כדי להשתמש ברשות המשתמש SeBackupPrivilege לקריאת קבצים וברשות המשתמש SeRestorePrivilege כדי לגשת לכל קובץ שהוא זקוק לו. זה מתעלם מכל האקסים שבדרך כלל מונעים ממך לגשת לקבצים אלה.
ההרשויות SeBackupPrivilege ו־SeRestorePrivilege מוקצות בדרך כלל למשתמשים בקבוצות מפעילי גיבוי ו־מנהלים, אך לפעמים הן נמחקות. מודול הגיבוי מסיר את הסיכון הזה ומעניק למשתמש שמפעיל את robocopy את ההרשאות הללו זמנית.
אם ברצונך לבדוק אם יש לחשבון המשתמש שלך את הרשאות אלה, תוכל להריץ את הפקודה whoami /priv
ושני הזכויות צריכות להופיע.
סינון קבצים ותיקיות
רוב האפשרויות הזמינות לך הן לכלול או לכבות קבצים ותיקיות במגוון דרכים. פירטתי את כל הדרכים שבהן תוכל לסנן או לכבות קבצים ותיקיות בהתאם לקריטריונים שונים.
על פי שם קובץ או סיומת קובץ
סינון של אילו קבצים יועתקו/יעברו בקריאת robocopy נעשה באמצעות תווי ג'וקר. ניתן להשתמש בתוו ג'וקר כדי לסנן קבצים התואמים מחרוזת שם קובץ או סיומת ספציפית.
לדוגמה, כדי להעתיק רק קבצי TXT, ניתן לציין *.txt.
אם ברצונך להגביל לקבצים שמתחילים ב-a, ניתן להשתמש ב-a*.
ניתן גם לספק מספר סטים של התאמות שמות קבצים על ידי הפרדתם ברווח כפי שמוצג למטה.
כאשר אתה מסנן לפי שם קובץ, robocopy יציג לך את הסינון בפלט.

על פי שם תיקייה
Robocopy מאפשר לך לסנן פריטים לא רק לפי קובץ אלא גם לפי שם תיקייה. באמצעות robocopy /xd
, ניתן לא exclude תיקיות מסוימות המתאימות לשם ספציפי.
כאשר אתה מעתיק תיקיות מרובות, השתמש במפסק /XD
כדי לא exclude תיקיות מהרץ.
על פי חותמת זמן של קובץ/תיקייה
מטה תמצא את כל אפשרויות הrobocopy שתסיר קבצים ותיקיות בהתבסס על מאפייני חותמת הזמן שונים.
Switch | Explanation |
/DCOPY:T | Copy directory timestamps |
/MAXAGE:n | Exclude files older than n days/date |
/MINAGE:n | Exclude files newer than n days/date |
/XO | If destination file exists and is the same date or newer than the source, don’t overwrite |
/XN | If destination file exists and is the same date or older than the source, don’t overwrite |
ישנם שני אפשרויות פופולריות לבחירה כאשר אתה מסנן על פי דברים כמו חותם זמן; /XO
ו-/MAXAGE
.
/XO
מאפשר לך להוציא קבצים מההעתקה רק אם הם חדשים מהמקור. באמצעות אופציה /XO
, ניתן לבצע robocopy רק של קבצים חדשים לפי תאריך גישה.
אם אתה יודע מה הגיל המרבי של קבצים יכול להיות, אתה יכול גם להשתמש באפשרות /MAXAGE
. זה מאפשר לך לציין בפורמט YYYMMDD את התאריך הוותיק יותר שבו קובץ יכול להיות לפני שהוא מתועתק.
עבודות Robocopy
ראית שיש הרבה אפשרויות זמינות לך. קל לאפשר לאפשרויות אלה להפוך למסורבלות בקרוב. למזלך, יש לך אפשרות טובה יותר מלתאר ולוודא שכל האפשרויות הללו נכונות בכל פעם.
קבצי עבודת Robocopy הם קבצי טקסט המכילים אפשרות אחת לכל שורה. בדרך כלל תשתמש ב־robocopy כדי ליצור את קבצי העבודה האלה. לאחר שהם נוצרו, תוכל להשתמש ב־robocopy כדי לשנות אותם או בעורך טקסט פשוט.
יש לך מספר פקודות robocopy שעובדות עם עבודות.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/JOB:jobname | Take parameters from the named job file | |||
/SAVE:jobname | Save parameters to the named job file | |||
/QUIT | Quit after processing command line | Useful for viewing parameters | ||
/NOSD | No source directory is specified | |||
/NODD | No destination directory is specified | |||
/IF | Include the following files |
A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob
. You can see that you can provide comments in the job file using ::
which is most of what this file has.
ללא הערות, הקובץ היה מכיל רק אפשרות אחת לכל שורה.
שמירת קבצי עבודה
שמירת קובץ עבודה היא פשוטה כשתוסיף את האפשרות /SAVE:<jobname>
בסוף התחביר שלך. החלף <jobname>
בשם העבודה. האפשרות /SAVE
תיצור קובץ בשם <jobname>.rcj בתיקייה שבה הרצת את robocopy.
עליך להגדיר את /SAVE
כאחרונה. כל אפשרויות המפורטות אחרי /SAVE
לא יתווספו לקובץ העבודה. כמו כן, שים לב שגם אם קובץ עבודה קיים כבר, robocopy תמיד תדרוס את הקיים. גבה או שליטה בגרסאות של קבצי העבודה שלך!
הערה: אם תנסה להשתמש באפשרות
/MT
כאשר אתה שומר על קובץ עבודה, היא לא תיכנס לקובץ העבודה. תודיע לי אם הצלחת לכלול אותה.
שימוש בקבצי משימות
ברגע שמשימה נשמרת לקובץ משימה, ניתן להשתמש באפשרות /JOB:<שם המשימה>
כדי לציין את קובץ המשימה לקריאה ממנו. Robocopy קורא את כל הפרמטרים בתוך קובץ המשימה ומבצע את הפעולה כאילו סיפקת את האפשרויות ישירות בשורת הפקודה.
יצירת קובץ משימה מבלי להריץ משימה באמצעות /QUIT
המטרה של האפשרות /QUIT
אינה ברורה. מבחינה חיצונית, תוכל לחשוב ש-/QUIT
מכריח ליציאה ממשימה בתהליך. במקום זאת, /QUIT
פועל יותר כאפשרות למנוע את הרצת המשימה בראשון מקום.
רשמית, האפשרות /QUIT
"מכריחה את robocopy להפסיק את עיבוד שורת הפקודה". עם זאת, יהיה יותר טוב להסביר אותה כיצירת קובץ משימה מבלי להריץ משימה.
אם תשתמש באפשרות /SAVE
, היא תריץ גם את המשימה אוטומטית. אין דרך ליצור קובץ משימה בלי להריץ תחילה את המשימה. ניתן ליצור את קובץ המשימה RCJ עם עורך טקסט או ניתן להשתמש ברובוקופי ולהוסיף את /QUIT
בסופו.
עריכת קובץ משימה
מאחר וקבצי המשימות הם פשוט קבצי טקסט, ניתן לערוך אותם בעזרת עורך הטקסט האהוב עליך או ניתן לבקש מרובוקופי לעשות זאת בשבילך.
ניתן לערוך קבצי משימה באמצעות שילוב של /JOB
, /SAVE
ו־/QUIT
.
לדוגמה, אולי תרצה לא לכלול את כל קבצי ה־EXE מהמשימה שלך ברובוקופי שנשמרה בקובץ משימה בשם backupfiles.rcj. כבר יצרת את קובץ המשימה ואין לך רצון להחליף את הדבר כולו. תוכל להוסיף את האפשרות החדשה כמו שמוצג למטה:
שימוש בקבצי משימות מרובים
ניתן אף לשלב את השימוש בקבצי משימות. כאשר מציינים מספר קבצי משימות בריצה אחת, כל האפשרויות המשמשות בריצה זו ימוזגו ביחד.
לדוגמה, אולי יש לך רשימה גדולה של קבצים שאתה רוצה לאייד מהם בגיבוי. פתח עורך טקסט, והוסף את המשתנים הבאים כדי ליצור קובץ exclude.rcj.
תוכל לאזור את הקבצים האלה מהמשימת גיבוי כך:
מאחר שקובץ המשימה המקורי גיבוי כבר היה מייבא את כל קבצי ה-EXE, התחביר של הריצה שלמעלה יראה כך /XF *.exe a.exe b.txt c.cer
. Robocopy משלב את כל האפשרויות לתוך אחת.
תבניות Robocopy ושימוש באפשרויות /NOSD
ו־/NODD
אם אתה עובד עם הרבה קבצי משימות, תוכל לבנות קבצי משימות שיקבלו פרמטרים. Robocopy מאפשר לך להעביר ערכים מהשורת פקודה למשימות בעת ריצתן. פרמטר אינו מונח של robocopy אך הוא מתאים היטב למקרה זה.
ניתן לבנות משימות robocopy שיקבלו פרמטרים על ידי שלא לציין ספריית מקור או יעד באופן ישיר באמצעות האפשרויות /NOSD
ו־/NODD
או פשוט שלא לכלול ספריית מקור ויעד כלל.
לדוגמה פשוטה, ניתן ליצור קובץ משימה בלי מקור או יעד באמצעות התחביר הבא. מטרת המשימה הזו היא להעתיק את כל קבצי ה-TXT וה-EXE ממקור לספריית יעד.
לבדו, משימה זו לעולם לא תעבוד מאחר ולא צוין מקור או ספריית יעד.
כאשר אתה יוצר משימה ללא ספריה מקור ויעד, קובץ המשימה נוצר באופן אוטומטי באמצעות אפשרויות /NOSD
ו־/NODD
.
האפשרות /NOSD
אומרת ל־robocopy שלא כללת ספריה מקור, בעוד ש־/NODD
מציינת שלא כללת ספריה יעד. קובץ המשימה הזה הוא "תבנית" למשימות אחרות.
אך תוכל להעביר "פרמטרים" לקובץ המשימה הזה כדי לספק ספריות מקור ויעד.
כדי להשתמש בקובץ המשימה שנוצר כעת להעתיק קבצים מ־C:\src אל C:\dst, תוכל להעביר את הספריות הללו ישירות בשורת הפקודה, שאז יועברו למשימה.
העתקה אסינכרונית (Robocopy /MT
)
באופן ברירת מחדל, robocopy מעבד רק קובץ אחד בכל פעם. אך תוכל לכפות עליו להעתיק יותר מקבצים בו זמנית על ידי השימוש באפשרות /MT
.
האפשרות /MT
מאפשרת לך לציין את מספר התהליכים שrobocopy ישתמש כדי להעתיק קבצים. המקסימום הוא 128.
תוכל להשתמש ב־/MT
כך:
I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.
שים לב שאם תשתמש ב־
/MT
, לא תוכל להשתמש ב־/IPG
או ב־/EFSRAW
. לביצועים טובים יותר, אל תפליט את הלוג למסוף. במקום זאת, השתמש ב־/LOG
.
קביעת זמנים להעתקה עם Robocopy
יש לrobocopy כמה דרכים לקבוע מתי להפעיל אותו.
שימוש ב־/RH
באמצעות האפשרות /RH
, אתה יכול להגיד ל־robocopy להפעיל את עצמו רק במהלך זמן מסוים. זה נהדר אם יש לך חלון תחזוקה או זמן שכולם כבר עזבו לבית.
אתה יכול לציין זמן התחלה וזמן סיום בפורמט HHMM-HHMM. לדוגמה, כדי להפעיל את robocopy רק בין השעות 5 בערב לשעות 9 בבוקר, כפי שהוגדר על ידי שעון המערכת, הרץ:
תראה שאם תפעיל את robocopy מחוץ לשעות אלו, הוא יגיד לך את השעה הנוכחית ויחכה לזמן ההתחלה להרץ.

עליך לוודא ששתי השעות בפורמט 24 שעות ובדיוק ארבע ספרות ארוכות. החלון חייב להיות גדול משני דקות.
בצורת ברירת המחדל, בשימוש ב־/RH
, robocopy יבדוק את זמן ההתחלה לפני רוץ התהליך כולו. עם זאת, אם יש לך הרבה קבצים ואתה חושב שהתהליך עשוי להמשך יותר מדי, אתה יכול להשתמש באפשרות /PF
. /PF
יכפה על robocopy לבדוק את החלון לפני כל קובץ.
באמצעות מתזמן המשימות
לוג הפלט
robocopy תמיד יחזיר לוג פלט. האם להציג את הלוג הזה דרך stdout בקונסול ו/או להפנות אותו לקובץ לוג, זה תלוי בך.
יש לך הרבה אפשרויות להצגת פלט robocopy.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/NP | No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file. | |||
/unicode | Display the status output as unicode text | |||
/LOG:file | Output status to log file and overwrite | |||
/UNILOG:file | Output status to unicode log file and overwrite | |||
/LOG+:file | Output status to log file and append to existing log file | |||
/UNILOG+:file | Output status to unicode log file and append to existing log file | |||
/TS | Displays the file timestamps for every file processed. | |||
/FP | Replaces simple file names with full file pathnames in the output. | |||
/NS | Does not show file sizes. | |||
/NC | Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged | |||
/NDL | Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files. | |||
/TEE | Output to console window, as well as the log file | |||
/NJH | No job header | |||
/NJS | No job summary | |||
/BYTES | Print sizes as bytes | |||
/X | Report all files, not just those selected & copied | |||
/V | Produce verbose output log, showing skipped files | |||
/ETA | Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish). | |||
/DEBUG | Show debug volume information |
הגבלת אלמנטים בלוג עם /NJS
ו־/NJH
באופן ברירת מחדל, robocopy מחזיר שני אלמנטים בפלט שלו, כותרת משימה וסיכום משימה.
הכותרת של המשימה היא פשוטה ROBOCOPY בראש.

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

ניתן להסתיר כל אחד מהרכיבים הללו באמצעות האפשרות /NJH
להסתרת כותרת העבודה והאפשרות /NJS
להסתרת סיכום העבודה. ניתן לכלול אחת מהאפשרויות הללו או שתיהן יחד.

הפניית יומן הפלט אל קובץ
אם נדרש לשמור את יומן הפלט, ניתן להפנות אותו לקובץ טקסט ו/או להציג אותו במסוף. ניתן לעשות זאת באמצעות מפנהי פלט מסורתיים כמו >
, >>
, PowerShell או האפשרות /LOG
.
כדי להפנות את יומן הפלט לקובץ באמצעות האפשרות /LOG
ולהחליף כל קובץ יומן קיים, ניתן להשתמש בתחביר /LOG:<נתיב קובץ>
כמצוין למטה. הפלט היחיד שתקבל במסוף הוא נתיב הקובץ הלוג.
אם ברצונך לשמור תוכן של קובץ יומן קיים ולהוסיף תוצאות לקובץ, ניתן להשתמש באופרטור +
כמצוין למטה.
הפניית יומן הפלט אל קובץ והצגה במסוף
אם ברצונך לשמור את יומן הפלט בקובץ וגם לראות אותו במסוף, ניתן להשתמש באפשרות /TEE
. אפשרות זו גורמת ל-robocopy לכתוב את הפלט לקובץ הלוג תוך שמירה על ההתנהגות ברירת המחדל של החזרת הפלט למסוף.
קודי יציאה
כמו כל כלי שורת פקודה אחר, robocopy מחזיר קודי יציאה התואמים לתוצאות הביצוע. כולנו מעריכים ש-robocopy יצא תמיד בהצלחה עם 0
אך זה לא תמיד קורה.
שמתחת תמצא את כל קודי היציאה שrobocopy מחזיר והסברם. כל קוד יציאה שגדול משבעה מעיד על לפחות כישלון אחד במהלך הביצוע.
Exit Code | Explanation |
0 | No action performed. Source and destination are synchronized. |
1 | At least one file was copied successfully. |
2 | Extra files or directories were detected. Examine log. |
3 | Exit codes 2 and 1 combined. |
4 | Mismatched files or directories found. Examine log. |
5 | Exit codes 4 and 1 combined. |
6 | Exit codes 4 and 2 combined. |
7 | Exit codes 4, 1 and 2 combined. |
8 | At least one file or directory could not be copied. Retry limit exceeeded. Examine log. |
16 | Copy failed catastrophically. |
שים לב שאם אתה מפעיל את robocopy בתוך יישום צד שלישי, התוכנה עשויה לחשוב שקוד יציאה שאינו אפס הוא כישלון. כדי למנוע זאת, אפשר לשנות את קוד היציאה ל-0 אם הוא מחזיר 1.
קוד היציאה "נוסף" של robocopy הוא קוד יציאה נפוץ המציין שקובץ "נוסף" נמצא בתיקיית היעד אך לא בתיקיית המקור. קוד זה יחריב קבצים נוספים שלא ימנעו מחיקות מתיקיית היעד.
שינוי קוד היציאה בקובץ מורכב
אם אתה מפעיל את robocopy עם קובץ מורכב, תוכל למצוא את ערך המשתנה %ERRORLEVEL%
. אם הוא מחזיר 1, אז תשתמש במילת המפתח exit
כדי לצאת מהתסריט עם 0.
שינוי קוד היציאה בתסריט PowerShell
אם אתה מפעיל את robocopy בתסריט PowerShell, אתה יכול להפעיל את robocopy עם Start-Process
באמצעות PassThru
כדי להחזיר את התהליך שנוצר ובאמצעות Wait
כדי לחכות להשלמת robocopy. תוכל לבדוק את מאפיין ExitCode
לערך של 1. אם קוד היציאה הוא 1, תצא מתסריט PowerShell עם 0 באמצעות $host.SetShouldExit()
.
שגיאות נפוצות
כשאתה מתמודד עם אלפי קבצים, ייתכן שתתקל בבעיות. הנה פירוט של שגיאות נפוצות שנתקלתי בהן
שגיאה פרמטר לא חוקי
כאשר אתה רואה שגיאה שאומרת שגיאה פרמטר לא חוקי, בדרך כלל זה אומר שניסית להעביר אפשרויות ל־robocopy בצורה אילוצית באופן כלשהו. שגיאת שגיאת פרמטר לא חוקי של robocopy 3 היא הנפוצה ביותר, כך נראה.
A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.
דוגמאות ל־Robocopy
ניתן לבנות מחרוזות משלך עבור robocopy או להשתמש במה שאחרים למדו ולהשתמש בהן! במקטע זה, אני אכסה מקרים שימוש כיצד להשתמש ב־robocopy להשגת יעדים שונים.
מצא גודל תיקייה ברשת
תורם: northendtroooper (Reddit)
מחק במהיר את תוכן התיקייה (התעלם מהרשאות בתת־תיקיות)
תורם: pizzasteveo (Reddit)
ביצוע העברת קבצים גדולים
תורם: @MySnozzberries (טוויטר)
מטרת קטע זה היא להכריח בעלות על כל הקבצים לחזור למנהלים. לאחר מכן אנו מוסיפים ACE אחראי עבור קבוצת המנהלים לשליטה מלאה על כל אובייקט באופן רקורסיבי, גם אם אנו מגדירים גם הורשה.
לבסוף, אנו עושים העתק robocopy מלא עם DACLs ליעד עם לוג. הלוג יכול להיבדק לבעיות הרשאות נוספות או סתם נעילות קבצים, וניתן לבצע סינכרון נוסף מאוחר יותר.
באמצעות רקורסיה, אנו כעת מכירים לקבוצת מנהלים כבעלי כל הקבצים והתיקיות. ייתכן ויש דרכים להתעלם מכך, אך זו הגישה הכבדה ביותר ובדרך כלל המהירה ביותר.
לאחר שאנו הבעלים, כעת יש לנו את האפשרות לכפות מנהלים חדשים ל-DACL של כל אובייקט. זה נותן למנהלים שליטה מלאה עם המשך ירושה, ובאופן רקורסיבי לאורך הנתיב.
הגדרה זו בשורש יכולה לכסות את הסביבה, אך כאשר יש לשיתוף פעולה של יצירת הבעלים עם שליטה מלאה (שלא יפל על נפשו, גם זו המלצה של Microsoft לדברים כמו ניהול פרופיל משתמש קבצים), המשתמש יכול להשבית ירושה או להסיר ACEs לפי שיקולו האישי. לכן, הגישה הכבדה היא לרוב התיקון המהיר ביותר.
לאחר ששינינו את ה-DACLs ברוב הקבצים, אנו מנסים להעתיק את הקבצים למיקום חדש, דבר הנפוץ לדברים כמו העברות חלוקת קבצים. לכך, אנו מעתיקים את הפריטים באופן רקורסיבי ומשתמשים במתג /SEC
כדי להעתיק גם את הנתונים/התכונות/הזמנים/ה-DACLs.
אז אנו מסוגלים לרשום את הפעולה עם נתיבים מלאים ועבור כל אובייקט (/V
מתג מפורט) ליומן, כך שאנו יכולים לתקן את <5% מהשגיאות שבדרך כלל קשורות לאורך נתיב או לנעילת קובץ ולקבל יותר פרטים.
זו היא הגישה הבסיסית לניהול העברת קבצים עם השפעה מינימלית על חוויית המשתמש. זה גם משפר את השליטה שיש למערכת המידע על הנתונים. אם ללקוח יש שיטה חזקה של שלטון נתונים שבה מנהלת הבעלות מנוהלת כראוי ברמת תיקייה לתיקייה ילד, זה יכול להיות שיחה מורכבת יותר, אך רוב הלקוחות שאנו פוגשים מסתפקים ביירושה וב-ACEs המבוססים על קבוצות בלבד, ולכן זהו המצב הנפוץ והתיקון שאנו מתחילים ממנו.
שלטון צלילה אלטרנטיבי
Robocopy הוא כלי מדהים, אך ישנם כל כך הרבה כלים אחרים שדומים אליו ועשויים לעורר עניין.
- xxcopy – יישום קוֹרֵא שורת פקודה דומה עם המון אפשרויות.
- פקודת PowerShell Copy-Item – לא ברמה הכל כך מתקדמת, אך הרבה יותר פשוטה.
- TreeSize – יישום גרפי וניתן לתכנות למציאת מידע על תיקיות.
סיכום
Robocopy הוא כלי מצוין להעתקת קבוצות גדולות של קבצים. בין אם אתה בוצע מיגרציה של נתונים, שומר על סנכרון בין תיקיות או פשוט זקוק לדרך מהירה להעתיק קבצים באופן מדויק, robocopy הוא בחירה נהדרת.