روبوكوبي هو أحد أدوات سطر الأوامر الأكثر استخدامًا لنسخ حجوم كبيرة من البيانات في نظام التشغيل ويندوز. إنها أداة شائعة بسبب قوتها. ولكن مع كل تلك القوة تأتي التعقيدات. في هذا الدليل، سنبسط كل تلك التعقيدات ونقدم دليلًا شاملاً حول استخدام هذه الأداة المفيدة.
روبوكوبي هو أداة سطر أوامر في ويندوز والتي تتوفر منذ نظام التشغيل ويندوز إن تي. إنها بديل لأداة النسخ الأقل مرونة xcopy. يتيح لك تحديد مسار القرص أو مسار الخادم لنسخ/نقل الملفات في سطر الأوامر.
إصدار روبوكوبي حتى هذا الكتاب هو 10.0.18. هذا هو الإصدار الذي قمت بإجراء اختباراتي عليه.
روبوكوبي يوفر مجموعة من الميزات التي يمكنك الاستفادة منها لأداء عمليات نسخ ونقل ملفات فعالة وسريعة. يمكنه:
- نسخ الملفات عبر الشبكة مع إمكانية استئناف العملية
- يمكن تخطي نقاط التوصيل 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، قم بتحديد مجلد المصدر ومجلد الوجهة تليهما اسم الملف في المصدر.
تعتمد الصيغة على البيئة
أيضًا، الخيارات التي تقدمها لـ robocopy ستعتمد على البيئة. ستحتاج إلى الإجابة على بعض الأسئلة عند محاولة معرفة الخيارات التي يجب استخدامها.
- هل ستقوم دائمًا بنسخ إلى مجلد فارغ؟
- هل من الممكن أن تكون هناك ملفات موجودة بالفعل في دليل الوجهة؟
- هل ستقوم بنسخ تيرابايت من البيانات أم فقط بضعة ميجابايت؟
- هل ستقوم بنسخ الملفات عبر الشبكة أم محلياً؟
- …والمزيد.
إذا لم تكن هناك ملفات في دليل ملف الوجهة، فلا ينبغي عليك الاهتمام بالخيارات التي تقوم بالكتابة فوق الملفات. إذا لم تكن ستقوم بنسخ الملفات عبر الشبكة، فلا داعي للقلق بشأن تلك الخيارات. قم بتحديد ظروفك الحالية والمستقبلية المحتملة التي ستكون بيئتك فيها بشكل واضح.
اعرف الخيارات الافتراضية
يستخدم Robocopy العديد من الخيارات افتراضيًا. يمكنك اختيارها من خلال النظر إلى الجداول أعلاه. كما يوفر إخراجًا مفيدًا في كل مرة تشغيل فيها الأداة.
يمكنك أن ترى أدناه أنه عندما قمت بتشغيل robocopy بخياراته الأساسية للغاية (المجلد المصدر والمجلد الوجهة)، استخدم تلقائيًا بعض الخيارات. فهم السلوك الافتراضي أمر مهم.
اربط الخيارات التي تراها في الإخراج بشرح الخيارات أعلاه وستفهم بالضبط ما يفعله robocopy تحت الأغطية.

فهم ما يمكن أوامر Robocopy أن تفعله
إذا كنت قد استخدمت أمر النسخ أو cmdlets Copy-Item في PowerShell، فربما قمت بتحديد مصدر ووجهة وتابعت يومك. ليس هناك الكثير من الخيارات التي يمكنك تكوينها هناك. تتمتع هذه الأوامر robocopy بسلوك افتراضي.
ولكن robocopy، من ناحية أخرى، يفهم الكثير أكثر ويمنحك مرونة لضبط السلوك بقدر ما تريد.
من المهم معرفة أن 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.
الأساسيات: تنفيذ سيناريوهات “ماذا لو”
إذا كان لديك خادم ملفات ضخم ترغب في نقله ولا ترغب في اتخاذ أي إجراء بعد، يمكنك استخدام Robocopy لإرجاع ما كان سيفعله.
باستخدام الخيار /L
، يمكنك أن تخبر Robocopy بعدادة جميع الملفات و/أو المجلدات التي تحددها وإرجاع قائمة بالملفات التي كان من المفترض أن يتم نسخها/نقلها.
يمكنك استخدام الخيار /L
مع أي خيار آخر. هذه طريقة رائعة لإرجاع جميع الخيارات التي كان سيستخدمها Robocopy (افتراضيًا أو لا). ستعطيك نظرة عامة على ما سيفعله Robocopy بناءً على الخيارات التي قدمتها له.

/L
الأساسيات: نسخ الملفات
أبسط استخدام لـ Robocopy هو استخدام مجلد المصدر والمجلد الهدف بدون أي خيارات.
ستقوم هذه الخيارات بنسخ جميع الملفات (مع استثناء المجلدات الفرعية) من C: \ src إلى C: \ dst .
يمكنك أيضًا نسخ كل شيء بما في ذلك المجلدات الفرعية (الفارغة أو غير الفارغة) وأذونات NTFS. هذه هي الطريقة التي أستطيع من خلالها نسخ كل شيء في دليل الملفات إلى دليل آخر.
أدناه، سأقوم بنسخ جميع أذونات 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 للوصول إلى أي ملفات يحتاج إليها. يتجاهل ذلك أي ACEs قد تمنعك عادةً من الوصول إلى تلك الملفات.
حقوق المستخدم SeBackupPrivilege و SeRestorePrivilege عادةً ما يتم تعيينها للمستخدمين في مجموعتي Backup Operators و Administrators ولكن في بعض الأحيان يمكن إزالتها. يقضي وحدة النسخ الاحتياطي على هذا الخطر وتمنح المستخدم الذي يقوم بتنفيذ robocopy تلك الحقوق مؤقتًا.
إذا كنت ترغب في التحقق مما إذا كان لدى حساب المستخدم الخاص بك هذا الحق، يمكنك تشغيل whoami /priv
ويجب عرض كلتا الحقوق.
تصفية الملفات والمجلدات
يتيح لك معظم الخيارات المتاحة استبعاد الملفات والمجلدات بطرق مختلفة. لقد قسمت جميع الطرق التي يمكنك بها تصفية أو استبعاد الملفات والمجلدات استنادًا إلى معايير مختلفة.
بواسطة اسم الملف أو امتداد الملف
يتم تصفية الملفات التي يتم نسخها/نقلها في استدعاء robocopy باستخدام البطاقات البارزة. يمكنك استخدام بطاقة بارزة لتصفية الملفات التي تطابق سلسلة اسم ملف محددة أو امتداد.
على سبيل المثال، لنسخ ملفات TXT فقط، يمكنك تحديد *.txt.
إذا كنت ترغب في تقييد النطاق للملفات التي تبدأ فقط بـ a، يمكنك استخدام a*.
يمكنك أيضًا توفير مجموعات متعددة من تطابقات أسماء الملفات عن طريق فصلها بمسافة كما هو موضح أدناه.
عندما تقوم بتصفية حسب اسم الملف، سيظهر لك robocopy التصفية في الإخراج.

بواسطة اسم الدليل
يسمح robocopy لك بتصفية العناصر ليس فقط حسب الملف ولكن أيضًا حسب اسم الدليل أيضًا. باستخدام robocopy /xd
، يمكنك استبعاد بعض الدلائل المطابقة لاسم معين.
عند نسخ مجلدات متعددة، استخدم التبديل /XD
لاستبعاد المجلدات من التشغيل.
بواسطة الطابع الزمني للملف/الدليل
فيما يلي جميع الخيارات 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:<اسم المهمة>
إلى نهاية بنية الأوامر الخاصة بك. استبدل <اسم المهمة>
باسم المهمة. سينشئ الخيار /SAVE
ملفًا يسمى <اسم المهمة>.rcj في الدليل الذي قمت بتشغيل فيه robocopy.
يجب عليك أن تقوم بتحديد /SAVE
كآخر خيار. لن يتم إضافة أي خيارات محددة بعد /SAVE
إلى ملف المهمة. كما يجب ملاحظة أنه حتى إذا كان ملف المهمة الحالي موجودًا بالفعل، سوف يقوم robocopy دائمًا بالكتابة فوق الموجود بالفعل. قم بنسخ احتياطي أو التحكم في الإصدارات لملفات المهمة الخاصة بك!
ملاحظة: إذا حاولت استخدام الخيار
/MT
عند الحفظ في ملف مهمة، فلن يتم ذلك في ملف المهمة. أخبرني إذا نجحت في تضمين ذلك.
استخدام ملفات الوظيفة
بمجرد حفظ وظيفة في ملف وظيفة، يمكنك بعد ذلك استخدام الخيار /JOB:<اسم_الوظيفة>
لتحديد ملف الوظيفة للقراءة منه. يقرأ Robocopy جميع المعلمات داخل ملف الوظيفة. ثم يقوم بالتنفيذ تمامًا كما لو كنت قد قمت بتوفير الخيارات مباشرة في سطر الأوامر.
إنشاء ملف وظيفة بدون تشغيل وظيفة باستخدام /QUIT
الغرض من الخيار /QUIT
ليس واضحًا. على السطح، قد تعتقد أن /QUIT
يجبر على إنهاء تشغيل وظيفة. بدلاً من ذلك، /QUIT
يعمل أكثر كخيار لمنع تشغيل وظيفة في المقام الأول.
رسميًا، الخيار /QUIT
“يجبر robocopy على إنهاء معالجة سطر الأوامر”. ومع ذلك، سيكون من الأفضل شرحه باعتباره إنشاء ملف وظيفة بدون تشغيل وظيفة.
إذا استخدمت الخيار /SAVE
، ستقوم أيضًا بتشغيل الوظيفة تلقائيًا. ليس هناك طريقة لإنشاء ملف وظيفة دون تشغيل الوظيفة أولاً. يمكنك إنشاء ملف وظيفة RCJ باستخدام محرر نصوص أو يمكنك استخدام robocopy للقيام بذلك عن طريق إضافة /QUIT
في النهاية.
تحرير ملف وظيفة
نظرًا لأن ملفات الوظيفة هي مجرد ملفات نصية، يمكنك تحريرها باستخدام محرر النصوص المفضل لديك أو يمكنك أن يقوم robocopy بذلك بالنيابة عنك.
يمكنك تحرير ملفات الوظيفة باستخدام مجموعة من الخيارات /JOB
، /SAVE
و /QUIT
.
على سبيل المثال، ربما ترغب في استبعاد جميع ملفات EXE من وظيفة robocopy التي تم حفظها في ملف وظيفة يسمى backupfiles.rcj. لقد قمت بالفعل بإنشاء ملف الوظيفة ولا ترغب في استبدال الشيء بأكمله. يمكنك إضافة الخيار الجديد مثلما يلي:
استخدام ملفات العمل المتعددة
يمكنك حتى دمج استخدام ملفات العمل أيضًا. عند تحديد عدة ملفات عمل في نفس التشغيل، ستتم دمج جميع الخيارات المستخدمة في هذا التشغيل معًا.
على سبيل المثال، ربما لديك قائمة كبيرة من الملفات لاستبعادها من مهمة نسخ الملفات backupfiles الخاصة بك. قم بفتح محرر نصوص، وأضف ما يلي لإنشاء ملف exclude.rcj.
ثم يمكنك استبعاد هذه الملفات من مهمة نسخ الملفات backupfiles كما يلي:
نظرًا لأن ملف مهمة النسخ الأصلي backupfiles كان يستبعد بالفعل جميع ملفات EXE، ستبدو بنية التشغيل أعلاه كما يلي /XF *.exe a.exe b.txt c.cer
. يقوم Robocopy بدمج جميع الخيارات في تشغيل واحد.
قوالب Robocopy واستخدام الخيارات /NOSD
و /NODD
إذا كنت تعمل مع العديد من ملفات المهام، يمكنك بناء ملفات مهام لقبول المعلمات. يسمح Robocopy لك بتمرير القيم من سطر الأوامر إلى المهام عند تشغيلها. المعلمة ليست مصطلحًا Robocopy ولكنها تتناسب تمامًا مع هذ scenario.
يمكنك بناء مهام Robocopy لقبول المعلمات عن طريق عدم تحديد دليل المصدر أو الوجهة إما صراحة باستخدام خيارات /NOSD
و /NODD
أو عدم تضمين دليل المصدر والوجهة على الإطلاق.
على سبيل المثال البسيط، أنشئ ملف مهمة بدون مصدر أو وجهة باستخدام النحو أدناه. هدف هذه المهمة هو نسخ جميع ملفات TXT و EXE من مصدر إلى دليل وجهة.
بمفردها، لن تعمل هذه المهمة أبدًا لأنه لم يتم تحديد دليل المصدر أو الوجهة.
عند إنشاء وظيفة بدون مجلد المصدر والوجهة، يتم إنشاء ملف الوظيفة تلقائيًا باستخدام الخيارات /NOSD
و /NODD
.
تخبر الخيارات /NOSD
robocopy أنك لم تتضمن مجلد المصدر بينما تشير /NODD
إلى عدم تضمين مجلد الوجهة. يعتبر ملف الوظيفة هذا “قالبًا” للوظائف الأخرى.
ولكن يمكنك تمرير “معلمات” إلى ملف الوظيفة هذا لتوفير مجلدي المصدر والوجهة.
لاستخدام ملف الوظيفة الذي تم إنشاؤه لنسخ الملفات من C:\src إلى C:\dst، يمكنك تمرير هذه المجلدين مباشرة على سطر الأوامر حيث ستمرر إلى الوظيفة.
نسخ غير متزامن (Robocopy /MT
)
بشكل افتراضي، يقوم robocopy بمعالجة ملف واحد في كل مرة. ومع ذلك، يمكنك إجبار 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
سيتحقق من وقت البدء قبل الجولة بأكملها. ومع ذلك، إذا كان لديك الكثير من الملفات وتعتقد أن العملية قد تستغرق وقتًا أطول من ذلك، يمكنك استخدام الخيار /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 لإنجاز أمور مختلفة.
العثور على حجم مجلد الشبكة
المساهم: نورثيندترووبر (ريديت)
حذف محتويات المجلد بسرعة (تجاهل الأذونات على المجلدات الفرعية)
المساهم: بيتزاستيفو (ريديت)
تنفيذ هجرات الملفات الكبيرة
المساهم: @MySnozzberries (تويتر)
الهدف من هذا المقتطف هو فرض الملكية على جميع الملفات مرة أخرى على المسؤولين. ثم نضيف ACE صريحة لمجموعة المسؤولين للتحكم الكامل في كل كائن بشكل متكرر على الرغم من أننا نقوم أيضًا بتعيين الوراثة.
وأخيرًا، نقوم بنسخة كاملة من robocopy مع DACLs إلى الوجهة مع سجل. يمكن مراجعة السجل لمشاكل الأذونات الإضافية أو مشاكل قفل الملفات فقط ويمكن أداء مزامنة دلتا أخرى في وقت لاحق.
قم بتعيين مجموعة المسؤولين بشكل متكرر كمالك لجميع الملفات والمجلدات. قد تكون هناك طرق لتجاوز هذا، لكن هذا هو النهج الأكثر تقشفًا عادةً وعادةً ما يكون الأسرع.
بمجرد أن نكون المالكين يمكننا الآن فرض ACE جديدة في DACL لكل كائن. هذا يمنح المسؤولين السيطرة الكاملة مع التوريث ممكّن وبشكل متكرر عبر المسار.
تعيين هذا عند الجذر مع التوريث سيغطي البيئة، ولكن عندما يحتوي مشاركة على CREATOR OWNER مع Full Control (الذي يوصي به Microsoft حتى لأشياء مثل مخازن ملفات ملف تعريف المستخدم), يمكن للمستخدم تعطيل التوريث أو إزالة ACEs حسب تقديرهم. لذا فإن الحل الأكثر تقشفًا عادة ما يكون الأسرع.
بمجرد تغييرنا لـ DACLs على معظم الملفات، نحاول نسخ الملفات إلى موقع جديد، شائع لأمور مثل هجرات مشاركة الملفات. لهذا، نقوم بنسخ العناصر بشكل متكرر واستخدام التبديل /SEC
لنسخ أيضًا البيانات/السمات/الطوابع الزمنية/DACLs.
ثم نسجّل العملية مع المسارات الكاملة ولجميع الكائنات (/V
التبديل التفصيلي) إلى سجل، حتى نتمكن من إصلاح الـ <5% من الأخطاء التي عادةً ما تكون طول المسار أو قفل الملف ذات الصلة ونحصل على تفاصيل أكثر.
هذا هو إطار بسيط لإدارة هجرة مشاركة ملفات مع تأثير أدنى على تجربة المستخدم. كما أنه يحسن من السيطرة التي يملكها الدعم التقني على البيانات. إذا كان لدى العميل ممارسة قوية في إدارة البيانات حيث يتم إدارة الملكية بشكل صحيح على مستوى مجلد الطفل، فإن هذا يصبح نقاشًا أكثر تعقيدًا، ولكن معظم العملاء الذين نجدهم يحظون بالحظ بأن يكونوا يستخدمون التوريث و ACEs على أساس مجموعات فقط، لذا هذا هو الوضع الأكثر شيوعًا والإصلاح الذي نبدأ به.
بدائل Robocopy
Robocopy هو أداة رائعة ولكن هناك العديد من الأدوات الأخرى المماثلة لها والتي قد تكون مثيرة للاهتمام.
- xxcopy – أداة مماثلة تعمل عن طريق سطر الأوامر مع العديد من الخيارات.
- Copy-Item PowerShell cmdlet – ليست بها نفس الميزات ولكنها أبسط بكثير.
- TreeSize – أداة رسومية وقابلة للبرمجة للعثور على معلومات المجلد.
ملخص
Robocopy هي أداة ممتازة لنسخ مجموعات كبيرة من الملفات. سواء كنت تقوم بترحيل البيانات أو الحفاظ على تزامن المجلدات أو ببساطة تحتاج إلى طريقة سريعة لنسخ الملفات بدقة، فإن Robocopy خيار رائع.