یکی از وظایف روتین ادمین های شبکه و دیتابیس ، تهیه ، کپی و ذخیره و نگهداری فایل های متعدد از جمله فایل های  Backup می باشد.بدون شک هدف نهایی بستر شبکه ، تولید دیتا است و در نتیجه مهمترین و پایه ای ترین وظیفه ادمین ها نیز ، نگهداری از داده ها در قالب های مختلف است.

سناریو: فرض کنید ادمین یا DBA یک بانک اطلاعاتی Microsoft SQL Server هستید. جهت تهیه Backup روتین از دیتا بیس ها ، میتوان در SQL یک Management Plan نوشت که بصورت Schedule شده از دیتابیس ها Backup بگیرد.Best Practice تهیه Backup اینست که در چندین نسخه تهیه گردد. توصیه میشود نسخه اول بر روی همان سرور و سایر نسخ بر روی استوریج دیگر که بصورت فیزیکی و حتی مکانی مستقل است ، انجام گردد.فرض کنید در سرور SQL شما ، سیستم عامل در درایو C ، فایل های دیتا در درایو D می باشند.و از درایو E نیز جهت Backup استفاده نموده ایم.Backup ها در درایوE تهیه میشوند و بعد از آن میخواهیم نسخه ثانویه Backup در فضایی دیگر بطور مثال درایو X ذخیره گردد. در ساده ترین حالت ممکن است درایو Xیک هارد اکسترنال متصل به سرور باشد.

می خواهیم شرایط بایستی بدین صورت باشد:

  • فایل ها بایستی بصورت اتوماتیک و بدون دخالت ادمین کپی شوند.
  • فایل ها بصورت زمان بندی شده هرساعت یکبار بصورت روزانه بر روی درایو X کپی شوند.
  • علاوه بر فایل ها ، کلیه فولدرها و ساب فولدر ها نیز کپی شود.
  • مهم اینکه: در صورت بروز خطا بصورت موقت ، به هر دلیل (بصورت مثال قطع بودن لحظه ای هارد اکسترنال یا مسیر شبکه ای مقصد) ، بعد از رفع خطا ، کپی بصورت خودکار ادامه یابد.
  • مهم تر اینکه: در هر مرحله ، فایل های جدید کپی شود. با اینکه مسیر مبدا و مقصد در هر بار اجرای کپی ، یکی است ، فایل های قبلی کپی شده تشخیص داده شود .


بدیهی است دستور کپی عادی سیستم عامل ویندوز ، توان تامین شرایط فوق الذکر را نخواهد داشت. اینجاست که قدرت Command که همیشه مورد مباهات و علاقه ادمین هاست ، توان و تفاوت خود را نشان میدهد . 

می توان جهت تامین موارد فوق الذکر ، از کامند xcopy استفاده کرد.سویچ های این فرمان مفید و سودمند برخلاف ظاهر ساده و قدیمی ، به قرار ذیل است:

[XCOPY [source]    [destination]        [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]                                                           
                   [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]                                                           
[/EXCLUDE:file1[+file2][+file3]...]                                                            

جهت انجام این تسک ، مراحل زیر  را طی می کنیم:

-ایجاد یک فایل Bat با محتوای کامند ذیل:

XCOPY E:\Backup X:\Backup       /E   /C    /H   /M

کاربرد تک تک سویچ های استفاده شده:

  • E:\Backup :مسیر مبدا کپی فایل ها
  • X:\Backup :مسیر مقصدکپی فایل ها
  • E /: سویچ E بدین معناست که از کامند خواسته ایم کلیه فولدر ها ، ساب فولدر ها و حتی فولدر های خالی را نیز کپی کند.
  • C/: سویچ C بدین معناست که در صورت بروز خطا ، عملیات کپی ادامه یا Continue شود.
  • H/: سویچ H از کامند می خواهد کلیه فایل ها از جمله مخفی و سیستمی را نیز کپی کند.
  • M/: سویچ M سویچ جالبی است. این سویچ از کامند می خواهد ((فقط)) فایل های با ویژگی Archive را کپی کندو علاوه بر این ، ویژگی Archive فایل ها را نیز حذف یا خاموش نماید.

نکته: با استفاده از سویچ M در کامند xcopy فایل های Backup ما که در بدو ساخت ، همانند سایر فایل ها ، دارای ویژگی Archive هستند، در مسیر مقصد کپی شده و سپس این صفت از آنها حذف می شود .در سری بعدی اجرای Backup دیگر فایل های کپی شده قبلی موجود در مسیر Source ، ویژگی Archive نخواهند داشت و در نتیجه توسط کامند ما کپی نخواهند شد.

- جهت زمان بندی عملیات فوق ، کافیست از طریق برنامه Task Schedule  ویندوز ، این کامند را بصورت زمان بندی شده درآورید.


تذکر: استفاده از اين روش ، براي انواع فايل ها قابل استفاده است. روش هايی در محيط SQL Server مايکروسافت وجود دارد که با استفاده از آن میتوان کپی مراحل ثانویه Backup ها را  نیز انجام داد . در این سناریوی این آموزش ،صرفاً به عنوان مثال به فایل های SQL اشاره شده است.

مطالعه کاربرد سایر سویچ های xcopy نیز خالی از لطف نیست:

XCOPY     source      [destination]          [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W
    [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]                                                                  
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]                                                                  
[/EXCLUDE:file1[+file2][+file3]...]                                                                  

source Specifies the file(s) to copy
destination Specifies the location and/or name of new files
A Copies only files with the archive attribute set,doesn't change the attribute/
/M Copies only files with the archive attribute set,turns off the archive attribute/
D:m-d-y Copies files changed on or after the specified date/
If no date is given, copies only those files whose
source time is newer than the destination time.
/P Prompts you before creating each destination file/
S Copies directories and subdirectories except empty ones/
E Copies directories and subdirectories, including empty ones.Same as /S /E. May be used to modify /T/
/V Verifies the size of each new file/
/W Prompts you to press a key before copying/
/C Continues copying even if errors occur/
/I If destination does not exist and copying more than one file,assumes that destination must be a directory
/Q Does not display file names while copying/
/F Displays full source and destination file names while copying/
/L Displays files that would be copied/
/G Allows the copying of encrypted files to destination that does not support encryption/
/H Copies hidden and system files also/
/R Overwrites read-only files/
/T Creates directory structure, but does not copy files. Does not/
include empty directories or subdirectories. /T /E includes
empty directories and subdirectories.
/U Copies only files that already exist in destination/
/K Copies attributes. Normal Xcopy will reset read-only attributes/
/N Copies using the generated short names/
/O Copies file ownership and ACL information/
/X Copies file audit settings (implies /O)/
/Y Suppresses prompting to confirm you want to overwrite an existing destination file/
/-Y Causes prompting to confirm you want to overwrite an existing destination file/
/Z Copies networked files in restartable mode/
/B Copies the Symbolic Link itself versus the target of the link/
/J Copies using unbuffered I/O. Recommended for very large files/

The switch /Y may be preset in the COPYCMD environment variable
This may be overridden with /-Y on the command line