天天看點

批處理指令--玩轉目錄之robocopy

作者:我想我知

上篇我們學習了xcopy的用法,知道它是複制檔案和目錄樹的指令,來回顧下。

複制檔案和目錄樹。

XCOPY 源 [目标] [/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]

[/EXCLUDE:file1[ file2][ file3]...]

最常用的參數是 /S /D /Y.

/S 複制非空的目錄和子目錄。如果省略 /s,xcopy 将在一個目錄中工作。

/D 隻複制比目标檔案新的所有源檔案。

/Y 禁止提示您确認要覆寫現存的目标檔案。

這篇我們學習一個與xcopy有些淵源的指令robocopy。

ROBOCOPY - Robust File and Folder Copy.(可靠的檔案和檔案夾複制)

當我們用XCOPY嘗試拷貝路徑名超過Windows最大路徑長度(254個字元)的源檔案時,将導緻一個相當無用的“記憶體不足”錯誤,然後操作将停止。

這個已經存在了很多年的錯誤使得XCOPY成為任何備份腳本的糟糕選擇,我們可以使用ROBOCOPY代替這一操作。

在了解robocopy前,我們看看xcopy與robocopy有何差異。

2007年,XCOPY被棄用,取而代之的是Robocopy,但它後來得到了緩刑,并改良添加了一些新功能。

這兩種工具之間有很多重疊之處,在複制非常大的目錄或數目衆多的小檔案時,Robocopy通常效率更高,更可靠。

在XCOPY中*.*是用來比對所有的檔案所必須的,在robocopy中這種指定是不需要的,因為這是預設操作。

XCOPY /D選項将隻複制源日期/時間比目标時間新的檔案,這也是Robocopy的預設操作。

要排除檔案(XCOPY /exclude),請使用Robocopy選項/XF(排除檔案)和/XD(排除目錄)。對于多個排除,使用Robocopy /JOB files_to_exclude.rcj

還有都支援UNC路徑格式(網絡路徑格式,如

\\servername\sharename\directory\filename),具有同樣的參數 /S /E /A等。

下面我們學習下robocopy的文法格式:

Syntax

ROBOCOPY 源檔案夾 目标檔案夾 要被拷貝的檔案 選項

預設情況下,Robocopy隻會複制源和目标具有不同時間戳或不同檔案大小的檔案。

robocopy的參數很多,分為源參數,目标參數,複制參數,排除參數,進階參數等等。通過不同參數的搭配可以實作非常多的功能,主要是複制、移動和同步(或者叫鏡像)。

另外,拷貝的效率一直是大家比較關注的問題,在參數調配上需要注意,好的調配能提高不少效率。

先來看下文法參數(圖):

批處理指令--玩轉目錄之robocopy

列出完整的參數說明:可以用「robocopy /?」

------------------------------------------------------------------------------

Usage :: ROBOCOPY source destination [file [file]...] [options]

source 來源:: 原始目錄(驅動器:\路徑或\\伺服器名\共享目錄\路徑)。

destination目錄:: 目标目錄(驅動器:\路徑或\\伺服器名\共享目錄\路徑)。

1.先講複制,想怎麼複制就怎麼複制

robocopy d:\work e:\backup *.txt *.doc /s

參數備注:

将d:\work檔案下的TXT、DOC檔案複制到e:\backup檔案夾,其他檔案則不複制。/s是表示包括除空檔案夾的所有子目錄,如果沒有/s則僅複制d:\work下的檔案而不包括子目錄。

robocopy d:\work e:\backup /e /s

/e表示複制所有子目錄包括空檔案夾。

robocopy d:\work e:\backup /e /lev:2

隻複制兩個層級内的檔案(兩級目錄,再下的層級裡的檔案則不拷貝)。

robocopy d:\work e:\backup /e /xf *.tmp *.bak

臨時檔案和備份檔案不複制。

robocopy d:\work e:\backup /s *.txt /maxage:7

隻複制最近7天修改的txt文本檔案。

2.移動檔案

robocopy d:\work e:\backup /move /e /s

3.同步(或叫鏡像,一般用于備份)檔案

robcopy d:\work e:\backup /mir

注意:這個複制是鏡像複制,多的會删除,少的會補上。

/mir的作用等同于/purge /e,/purge表示清理目标檔案夾有而源檔案夾裡沒有的檔案(夾)。

通過這個指令,能保證源檔案夾和目标檔案夾結構與檔案完全相同。這在新增映射制作備份時,非常有用。但如果不需要就要慎重了。

4.幾個排除的差別

1)垃圾檔案不copy

robocopy d:\work e:\backup /e /xf *.tmp *.bak

臨時檔案和備份檔案不複制。

2)隐藏檔案不copy

robocopy d:\work e:\backup /e /xa:h

/e等同于/e /s

/XC :: 排除已更改的檔案。excluding change

/XN :: 排除較新的檔案。意思是不要從來源端複制比目的端新的檔案。隻複制舊檔案。excluding newer

/XO ::排除較舊的檔案。意思是來源端沒有比目的端新時,就不複制。隻複制新檔案。excluding older

5.效率問題

先看一個例子

robocopy %resource%\ %path22%\ /NFL /NS /NC /NP /MT:50 1>>log.txt 2>>error.txt

主要是MT的設定,預設是8,最大是128,50是筆者比較後的最佳設定,這個設定效率(拷貝速度)最高。搭配一些其它的參數可使log簡潔的同時,不影響作用,速度還能最快。這也是其它拷貝類工具所不能比拟的,說是神器也不為過。

最後,為什麼不用可視版的工具robocopy,一來沒有指令行友善(參數超極多),二來會生成隐藏log ,不推薦。

繼續閱讀