أوامر Robocopy: هجرة البيانات، مزامنة المجلد، والمزيد

روبوكوبي هو أحد أدوات سطر الأوامر الأكثر استخدامًا لنسخ حجوم كبيرة من البيانات في نظام التشغيل ويندوز. إنها أداة شائعة بسبب قوتها. ولكن مع كل تلك القوة تأتي التعقيدات. في هذا الدليل، سنبسط كل تلك التعقيدات ونقدم دليلًا شاملاً حول استخدام هذه الأداة المفيدة.

روبوكوبي هو أداة سطر أوامر في ويندوز والتي تتوفر منذ نظام التشغيل ويندوز إن تي. إنها بديل لأداة النسخ الأقل مرونة 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 c:\src d:\dst copythisfile.txt

تعتمد الصيغة على البيئة

أيضًا، الخيارات التي تقدمها لـ robocopy ستعتمد على البيئة. ستحتاج إلى الإجابة على بعض الأسئلة عند محاولة معرفة الخيارات التي يجب استخدامها.

  • هل ستقوم دائمًا بنسخ إلى مجلد فارغ؟
  • هل من الممكن أن تكون هناك ملفات موجودة بالفعل في دليل الوجهة؟
  • هل ستقوم بنسخ تيرابايت من البيانات أم فقط بضعة ميجابايت؟
  • هل ستقوم بنسخ الملفات عبر الشبكة أم محلياً؟
  • …والمزيد.

إذا لم تكن هناك ملفات في دليل ملف الوجهة، فلا ينبغي عليك الاهتمام بالخيارات التي تقوم بالكتابة فوق الملفات. إذا لم تكن ستقوم بنسخ الملفات عبر الشبكة، فلا داعي للقلق بشأن تلك الخيارات. قم بتحديد ظروفك الحالية والمستقبلية المحتملة التي ستكون بيئتك فيها بشكل واضح.

اعرف الخيارات الافتراضية

يستخدم Robocopy العديد من الخيارات افتراضيًا. يمكنك اختيارها من خلال النظر إلى الجداول أعلاه. كما يوفر إخراجًا مفيدًا في كل مرة تشغيل فيها الأداة.

يمكنك أن ترى أدناه أنه عندما قمت بتشغيل robocopy بخياراته الأساسية للغاية (المجلد المصدر والمجلد الوجهة)، استخدم تلقائيًا بعض الخيارات. فهم السلوك الافتراضي أمر مهم.

اربط الخيارات التي تراها في الإخراج بشرح الخيارات أعلاه وستفهم بالضبط ما يفعله robocopy تحت الأغطية.

Default robocopy options

فهم ما يمكن أوامر 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 بناءً على الخيارات التي قدمتها له.

Using /L

الأساسيات: نسخ الملفات

أبسط استخدام لـ Robocopy هو استخدام مجلد المصدر والمجلد الهدف بدون أي خيارات.

> robocopy C:\src C:\dst

ستقوم هذه الخيارات بنسخ جميع الملفات (مع استثناء المجلدات الفرعية) من C: \ src إلى C: \ dst .

يمكنك أيضًا نسخ كل شيء بما في ذلك المجلدات الفرعية (الفارغة أو غير الفارغة) وأذونات NTFS. هذه هي الطريقة التي أستطيع من خلالها نسخ كل شيء في دليل الملفات إلى دليل آخر.

أدناه، سأقوم بنسخ جميع أذونات NTFS ومالكي الملفات والمجلدات الفرعية (بما في ذلك المجلدات الفارغة) وجميع سمات الملفات. كل ذلك ممكن بفضل الخيار /E لتضمين جميع المجلدات الفرعية الفارغة و /COPYALL لنسخ بقية الملفات.

> robocopy C:\src C:\dst /E /COPYALL

الأساسيات: نقل الملفات

نقل الملفات يقوم بنقل الملفات من مجلد إلى آخر تمامًا مثل النسخ. الفرق الوحيد في عملية النقل هو أن الملفات المصدرية يتم إزالتها بعد عملية النسخ.

لحذف الملفات/المجلدات من المصدر بعد النسخ، استخدم الخيار /MOV. سيتم إزالة جميع الملفات في المجلد المحدد (بدون مجلدات فرعية).

> robocopy C:\src C:\dst /MOV

يمكنك أيضًا استخدام /MOVE لنقل جميع الملفات والمجلدات الفرعية.

> robocopy C:\src C:\dst /MOVE

الأساسيات: مزامنة الملفات

يتيح لك Robocopy مزامنة مجلدين. هذا يعني ضمان أن جميع الملفات في مجلد الوجهة موجودة في مجلد المصدر ولا يوجد المزيد. سيقوم الخيار /MIR بتكرار نسخ البيانات بنسخ جميع الملفات في المصدر غير الموجودة في الوجهة و حذف الملفات في الوجهة غير الموجودة في المصدر. احذر!

> robocopy C:\src C:\dst /MIR

نسخ الملفات عبر الشبكة

إذا كنت تقوم بنسخ الملفات عبر الشبكة، فهناك بعض الخيارات التي يجب أن تأخذها في الاعتبار.

Robocopy يتيح لك نسخ الملفات في “وضع قابل لإعادة البدء” باستخدام الخيار /Z. وهذا يعني أنه إذا بدأت نسخ الملف وفشلت في منتصف الطريق، يمكن أن تبدأ النسخة مرة أخرى بدلاً من الفشل تمامًا. الخيار /Z مفيد عندما يتم قطع التيار عبر الشبكة.

تحذير: قد قام بعض الأشخاص بالإبلاغ عن استخدام /Z يقلل من الأداء بنسبة 1/4. أخبرني بما تجده.

يمكنك أيضًا استخدام الخيار /FFT. تعتبر هذه الخاصية معروفة بالحفاظ على الطوابع الزمنية للملف بدقة أكبر عند نقلها عبر الشبكة. تستخدم هذه الخيارات طوابع FAT بدلاً من NTFS.

robocopy C:\src \\SRV1\share /Z /FFT

استخدام /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.

> robocopy C:\src C:\dst *.txt

إذا كنت ترغب في تقييد النطاق للملفات التي تبدأ فقط بـ a، يمكنك استخدام a*.

> robocopy C:\src C:\dst a*

يمكنك أيضًا توفير مجموعات متعددة من تطابقات أسماء الملفات عن طريق فصلها بمسافة كما هو موضح أدناه.

> robocopy C:\src C:\dst a* b*

عندما تقوم بتصفية حسب اسم الملف، سيظهر لك robocopy التصفية في الإخراج.

FIltering files output

بواسطة اسم الدليل

يسمح robocopy لك بتصفية العناصر ليس فقط حسب الملف ولكن أيضًا حسب اسم الدليل أيضًا. باستخدام robocopy /xd، يمكنك استبعاد بعض الدلائل المطابقة لاسم معين.

عند نسخ مجلدات متعددة، استخدم التبديل /XD لاستبعاد المجلدات من التشغيل.

> robocopy C:\src C:\dst /XD "c:\src\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 فقط الملفات الجديدة حسب تاريخ الوصول.

> robocopy C:\src C:\dsc /XO

إذا كنت تعرف أقصى عمر للملفات، يمكنك أيضًا استخدام الخيار /MAXAGE. يتيح لك هذا التحديد بتنسيق YYYMMDD تحديد تاريخ أقدم يمكن أن يكون للملف قبل نسخه.

> robocopy c:\src c:\dst /S /MAXAGE:20191001

مهام 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.

بدون تعليقات، سيحتوي الملف على خيار واحد فقط في كل سطر.

::
:: Robocopy Job C:\MYJOB.RCJ
::
:: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM
::

::
:: Source Directory :
::
        /SD:C:\SRC\     :: Source Directory.

::
:: Destination Directory :
::
        /DD:C:\SRC\     :: Destination Directory.

::
:: Include These Files :
::
        /IF             :: Include Files matching these names
::              *.*     :: Include all names (currently - Command Line may override)

::
:: Exclude These Directories :
::
        /XD             :: eXclude Directories matching these names
::                      :: eXclude no names (currently - Command Line may override)

::
:: Exclude These Files :
::
        /XF             :: eXclude Files matching these names
::                      :: eXclude no names (currently - Command Line may override)
::
:: Copy options :
::
        /DCOPY:DA       :: what to COPY for directories (default is /DCOPY:DA).
        /COPY:DAT       :: what to COPY for files (default is /COPY:DAT).
::
:: Retry Options :
::
        /R:1000000      :: number of Retries on failed copies: default 1 million.
        /W:30           :: Wait time between retries: default is 30 seconds.
::
:: Logging Options :
::

حفظ ملفات المهام

حفظ ملف مهمة بسيط كإضافة للخيار /SAVE:<اسم المهمة> إلى نهاية بنية الأوامر الخاصة بك. استبدل <اسم المهمة> باسم المهمة. سينشئ الخيار /SAVE ملفًا يسمى <اسم المهمة>.rcj في الدليل الذي قمت بتشغيل فيه robocopy.

> robocopy C:\src C:\dst /SAVE:myjob

يجب عليك أن تقوم بتحديد /SAVE كآخر خيار. لن يتم إضافة أي خيارات محددة بعد /SAVE إلى ملف المهمة. كما يجب ملاحظة أنه حتى إذا كان ملف المهمة الحالي موجودًا بالفعل، سوف يقوم robocopy دائمًا بالكتابة فوق الموجود بالفعل. قم بنسخ احتياطي أو التحكم في الإصدارات لملفات المهمة الخاصة بك!

ملاحظة: إذا حاولت استخدام الخيار /MT عند الحفظ في ملف مهمة، فلن يتم ذلك في ملف المهمة. أخبرني إذا نجحت في تضمين ذلك.

استخدام ملفات الوظيفة

بمجرد حفظ وظيفة في ملف وظيفة، يمكنك بعد ذلك استخدام الخيار /JOB:<اسم_الوظيفة> لتحديد ملف الوظيفة للقراءة منه. يقرأ Robocopy جميع المعلمات داخل ملف الوظيفة. ثم يقوم بالتنفيذ تمامًا كما لو كنت قد قمت بتوفير الخيارات مباشرة في سطر الأوامر.

> robocopy /JOB:myjob

إنشاء ملف وظيفة بدون تشغيل وظيفة باستخدام /QUIT

الغرض من الخيار /QUIT ليس واضحًا. على السطح، قد تعتقد أن /QUIT يجبر على إنهاء تشغيل وظيفة. بدلاً من ذلك، /QUIT يعمل أكثر كخيار لمنع تشغيل وظيفة في المقام الأول.

رسميًا، الخيار /QUIT “يجبر robocopy على إنهاء معالجة سطر الأوامر”. ومع ذلك، سيكون من الأفضل شرحه باعتباره إنشاء ملف وظيفة بدون تشغيل وظيفة.

إذا استخدمت الخيار /SAVE، ستقوم أيضًا بتشغيل الوظيفة تلقائيًا. ليس هناك طريقة لإنشاء ملف وظيفة دون تشغيل الوظيفة أولاً. يمكنك إنشاء ملف وظيفة RCJ باستخدام محرر نصوص أو يمكنك استخدام robocopy للقيام بذلك عن طريق إضافة /QUIT في النهاية.

> robocopy C:\src C:\dst /SAVE:myjob /QUIT

تحرير ملف وظيفة

نظرًا لأن ملفات الوظيفة هي مجرد ملفات نصية، يمكنك تحريرها باستخدام محرر النصوص المفضل لديك أو يمكنك أن يقوم robocopy بذلك بالنيابة عنك.

يمكنك تحرير ملفات الوظيفة باستخدام مجموعة من الخيارات /JOB، /SAVE و /QUIT.

على سبيل المثال، ربما ترغب في استبعاد جميع ملفات EXE من وظيفة robocopy التي تم حفظها في ملف وظيفة يسمى backupfiles.rcj. لقد قمت بالفعل بإنشاء ملف الوظيفة ولا ترغب في استبدال الشيء بأكمله. يمكنك إضافة الخيار الجديد مثلما يلي:

> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT

استخدام ملفات العمل المتعددة

يمكنك حتى دمج استخدام ملفات العمل أيضًا. عند تحديد عدة ملفات عمل في نفس التشغيل، ستتم دمج جميع الخيارات المستخدمة في هذا التشغيل معًا.

على سبيل المثال، ربما لديك قائمة كبيرة من الملفات لاستبعادها من مهمة نسخ الملفات backupfiles الخاصة بك. قم بفتح محرر نصوص، وأضف ما يلي لإنشاء ملف exclude.rcj.

/XF
    a.exe
    b.txt
    c.cer

ثم يمكنك استبعاد هذه الملفات من مهمة نسخ الملفات backupfiles كما يلي:

> robocopy /JOB:backupfiles /JOB:exclude

نظرًا لأن ملف مهمة النسخ الأصلي backupfiles كان يستبعد بالفعل جميع ملفات EXE، ستبدو بنية التشغيل أعلاه كما يلي /XF *.exe a.exe b.txt c.cer. يقوم Robocopy بدمج جميع الخيارات في تشغيل واحد.

قوالب Robocopy واستخدام الخيارات /NOSD و /NODD

إذا كنت تعمل مع العديد من ملفات المهام، يمكنك بناء ملفات مهام لقبول المعلمات. يسمح Robocopy لك بتمرير القيم من سطر الأوامر إلى المهام عند تشغيلها. المعلمة ليست مصطلحًا Robocopy ولكنها تتناسب تمامًا مع هذ scenario.

يمكنك بناء مهام Robocopy لقبول المعلمات عن طريق عدم تحديد دليل المصدر أو الوجهة إما صراحة باستخدام خيارات /NOSD و /NODD أو عدم تضمين دليل المصدر والوجهة على الإطلاق.

على سبيل المثال البسيط، أنشئ ملف مهمة بدون مصدر أو وجهة باستخدام النحو أدناه. هدف هذه المهمة هو نسخ جميع ملفات TXT و EXE من مصدر إلى دليل وجهة.

> robocopy *.txt *.exe /SAVE:backupfiles /QUIT

بمفردها، لن تعمل هذه المهمة أبدًا لأنه لم يتم تحديد دليل المصدر أو الوجهة.

عند إنشاء وظيفة بدون مجلد المصدر والوجهة، يتم إنشاء ملف الوظيفة تلقائيًا باستخدام الخيارات /NOSD و /NODD.

/NOSD           
/NODD
/IF
    *.txt
    *.exe
/DCOPY:DA
/COPY:DAT
/R:1000000
/W:30

تخبر الخيارات /NOSD robocopy أنك لم تتضمن مجلد المصدر بينما تشير /NODD إلى عدم تضمين مجلد الوجهة. يعتبر ملف الوظيفة هذا “قالبًا” للوظائف الأخرى.

ولكن يمكنك تمرير “معلمات” إلى ملف الوظيفة هذا لتوفير مجلدي المصدر والوجهة.

لاستخدام ملف الوظيفة الذي تم إنشاؤه لنسخ الملفات من C:\src إلى C:\dst، يمكنك تمرير هذه المجلدين مباشرة على سطر الأوامر حيث ستمرر إلى الوظيفة.

> robocopy /JOB:backupfiles C:\src C:\dst

نسخ غير متزامن (Robocopy /MT)

بشكل افتراضي، يقوم robocopy بمعالجة ملف واحد في كل مرة. ومع ذلك، يمكنك إجبار robocopy على نسخ المزيد من الملفات في نفس الوقت باستخدام الخيار /MT.

يتيح لك الخيار /MT تحديد عدد المواضيع التي سيستخدمها robocopy لنسخ الملفات. الحد الأقصى هو 128.

يمكنك استخدام /MT بهذه الطريقة:

> robocopy C:\src C:\dst /MT:32

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 C:\src C:\dst /RH:1700-0900

ستلاحظ أنه إذا استدعيت robocopy خارج تلك الساعات، سيخبرك بالوقت الحالي وينتظر وقت البدء للتشغيل.

Robocopy tells you what time it will start if scheduled

يجب عليك التأكد من أن كلتا الأوقات في تنسيق 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 في الأعلى.

Robocopy job header

يعرض ملخص العمل ملخصًا لحالة جميع الملفات/المجلدات، وكمية البيانات التي تم نقلها ووقت انتهاء التشغيل.

Robocopy job summary

يمكنك إخفاء كل من هذه العناصر باستخدام الخيار /NJH لإخفاء رأس العمل والخيار /NJS لإخفاء ملخص العمل. يمكنك تضمين أيًا من هذه الخيارات أو كل منهما معًا.

Hiding the job header and job summary

توجيه سجل الإخراج إلى ملف

إذا كنت بحاجة إلى حفظ سجل الإخراج، يمكنك توجيهه إلى ملف نصي و/أو عرضه على وحدة التحكم. يمكنك القيام بذلك باستخدام موجهات الإخراج التقليدية مثل >، >>، PowerShell أو الخيار /LOG.

لتوجيه سجل الإخراج إلى ملف باستخدام الخيار /LOG مع استبدال أي ملف سجل موجود، استخدم بناء الجملة /LOG:<مسار الملف> كما في المثال أدناه. الإخراج الوحيد الذي ستتلقاه على وحدة التحكم هو مسار ملف السجل.

> robocopy C:\src C:\dst /LOG:c:\file.log

 Log File : c:\file.log

إذا كنت ترغب في الاحتفاظ بمحتويات أي ملف سجل موجود وإلحاق النتائج بملف، يمكنك استخدام عامل الإضافة + كما هو موضح أدناه.

> robocopy C:\src C:\dst /LOG+:c:\file.log

 Log File : c:\file.log

توجيه سجل الإخراج إلى ملف وعرضه على وحدة التحكم

إذا كنت ترغب في حفظ سجل الإخراج في ملف ورؤيته أيضًا على وحدة التحكم، يمكنك استخدام الخيار /TEE. يتسبب هذا الخيار في كتابة إخراج robocopy إلى ملف السجل مع الاحتفاظ بالسلوك الافتراضي لإرجاع الإخراج إلى وحدة التحكم.

robocopy C:\src C:\dst /LOG+:c:\file.log /TEE

رموز الخروج

مثل جميع الأدوات الأخرى في سطر الأوامر، يعيد 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.

> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0

تغيير رمز الخروج في نص PowerShell

إذا كنت تنفذ Robocopy في نص PowerShell، فيمكنك استدعاء Robocopy باستخدام Start-Process باستخدام PassThru لإرجاع العملية المنشأة و Wait لانتظار انتهاء Robocopy. يمكنك ثم التحقق من خاصية ExitCode للحصول على قيمة 1. إذا كان رمز الخروج هو 1، فاخرج من نص PowerShell برمز 0 باستخدام $host.SetShouldExit().

$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode
if ($exitCode -eq 1) {
    $host.SetShouldExit(0)
}

أخطاء شائعة

إذا كنت تتعامل مع آلاف الملفات، فمن المحتمل أن تواجه بعض المشاكل. فيما يلي تفصيل للأخطاء الشائعة التي واجهتها

خطأ في المعلمة غير صالحة

عندما ترى خطأ يشير إلى خطأ معلمة غير صالحة، فهذا يعني عادة أنك حاولت تمرير خيارات إلى 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 لإنجاز أمور مختلفة.

العثور على حجم مجلد الشبكة

المساهم: نورثيندترووبر (ريديت)

> robocopy "\\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64

حذف محتويات المجلد بسرعة (تجاهل الأذونات على المجلدات الفرعية)

المساهم: بيتزاستيفو (ريديت)

> robocopy c:\dummy c:\foldertodelete /MIR

تنفيذ هجرات الملفات الكبيرة

المساهم: @MySnozzberries (تويتر)

الهدف من هذا المقتطف هو فرض الملكية على جميع الملفات مرة أخرى على المسؤولين. ثم نضيف ACE صريحة لمجموعة المسؤولين للتحكم الكامل في كل كائن بشكل متكرر على الرغم من أننا نقوم أيضًا بتعيين الوراثة.

وأخيرًا، نقوم بنسخة كاملة من robocopy مع DACLs إلى الوجهة مع سجل. يمكن مراجعة السجل لمشاكل الأذونات الإضافية أو مشاكل قفل الملفات فقط ويمكن أداء مزامنة دلتا أخرى في وقت لاحق.

> takeown /F .\test /R /A /D Y
> icacls .\test /grant "Administrators":(OI)(CI)F /T
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

قم بتعيين مجموعة المسؤولين بشكل متكرر كمالك لجميع الملفات والمجلدات. قد تكون هناك طرق لتجاوز هذا، لكن هذا هو النهج الأكثر تقشفًا عادةً وعادةً ما يكون الأسرع.

> takeown /F .\test /R /A /D Y

بمجرد أن نكون المالكين يمكننا الآن فرض ACE جديدة في DACL لكل كائن. هذا يمنح المسؤولين السيطرة الكاملة مع التوريث ممكّن وبشكل متكرر عبر المسار.

تعيين هذا عند الجذر مع التوريث سيغطي البيئة، ولكن عندما يحتوي مشاركة على CREATOR OWNER مع Full Control (الذي يوصي به Microsoft حتى لأشياء مثل مخازن ملفات ملف تعريف المستخدم), يمكن للمستخدم تعطيل التوريث أو إزالة ACEs حسب تقديرهم. لذا فإن الحل الأكثر تقشفًا عادة ما يكون الأسرع.

> icacls .\test /grant "Administrators":(OI)(CI)F /T

بمجرد تغييرنا لـ DACLs على معظم الملفات، نحاول نسخ الملفات إلى موقع جديد، شائع لأمور مثل هجرات مشاركة الملفات. لهذا، نقوم بنسخ العناصر بشكل متكرر واستخدام التبديل /SEC لنسخ أيضًا البيانات/السمات/الطوابع الزمنية/DACLs.

ثم نسجّل العملية مع المسارات الكاملة ولجميع الكائنات (/V التبديل التفصيلي) إلى سجل، حتى نتمكن من إصلاح الـ <5% من الأخطاء التي عادةً ما تكون طول المسار أو قفل الملف ذات الصلة ونحصل على تفاصيل أكثر.

> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

هذا هو إطار بسيط لإدارة هجرة مشاركة ملفات مع تأثير أدنى على تجربة المستخدم. كما أنه يحسن من السيطرة التي يملكها الدعم التقني على البيانات. إذا كان لدى العميل ممارسة قوية في إدارة البيانات حيث يتم إدارة الملكية بشكل صحيح على مستوى مجلد الطفل، فإن هذا يصبح نقاشًا أكثر تعقيدًا، ولكن معظم العملاء الذين نجدهم يحظون بالحظ بأن يكونوا يستخدمون التوريث و ACEs على أساس مجموعات فقط، لذا هذا هو الوضع الأكثر شيوعًا والإصلاح الذي نبدأ به.

بدائل Robocopy

Robocopy هو أداة رائعة ولكن هناك العديد من الأدوات الأخرى المماثلة لها والتي قد تكون مثيرة للاهتمام.

  • xxcopy – أداة مماثلة تعمل عن طريق سطر الأوامر مع العديد من الخيارات.
  • Copy-Item PowerShell cmdlet – ليست بها نفس الميزات ولكنها أبسط بكثير.
  • TreeSize – أداة رسومية وقابلة للبرمجة للعثور على معلومات المجلد.

ملخص

Robocopy هي أداة ممتازة لنسخ مجموعات كبيرة من الملفات. سواء كنت تقوم بترحيل البيانات أو الحفاظ على تزامن المجلدات أو ببساطة تحتاج إلى طريقة سريعة لنسخ الملفات بدقة، فإن Robocopy خيار رائع.

Source:
https://adamtheautomator.com/robocopy/