首頁 > 軟體

robocopy命令用法範例解析

2022-11-01 14:03:13

範例一:檔案,想怎麼複製就怎麼複製

[實現效果]隨時將原始檔夾中的純文字(TXT)、Word檔案(DOC)還有BMP、TIF影象檔案複製到目標資料夾中
,這是在“資源管理器”中直接拖放所做不到的。[簡單命令]

robocopy d:work e:back *.txt *.doc *.bmp *.tif /s

[引數講解]
  將d:work檔案下的TXT、DOC、BMP、TIF複製到e:back資料夾,其他檔案則不復制。/s是表示包括
除空檔案下的所有子目錄,如果沒有則僅複製d:work下的檔案而不包括子目錄。
[舉一反三]
(1)如果要將資料夾下的所有檔案包括空資料夾全部複製到目標資料夾,命令為:robocopy
d:work e:back /e
  /e表示複製所有子目錄包括空資料夾。
(2)如果只想複製兩個層級內的檔案(再下的層級裡的檔案則不拷貝),輸入命令:robocopy
d:work e:back /e /lev:2
  /lev:2表示複製的層級,比如指定層級後d:worksoft(二級)下的檔案會被複制,而
d:worksoftoffice(***)下的檔案則不被複制。

範例二:垃圾檔案不復制

[實現效果]在備份資料時,不可避免會將類似於*.bak、*.tmp的垃圾檔案也複製到目標資料夾,用
Robocopy可以將我們經常碰到的垃圾檔案在拷貝時就清理出家門,從而生成一個乾乾淨淨的資料夾。
[簡單命令]

robocopy d:work e:back /e /xf *.tmp *.bak

[引數講解]/xf為指定不執行復制操作的檔案型別,後面的檔名支援萬用字元。如果引數為/xd,則表示排除後
面指定的資料夾。

範例三:大檔案 我不要

[實現效果]複製的時候,為了節省時間,需要將一些大檔案暫時不拷貝,等有空閒時間時,再執行復制操作不
遲。

[簡單命令]

robocopy d:work e:back /e /max:6000000

[引數講解]僅複製不大於6000000bytes的檔案,/max:後直接接數值,數值單位為byte。如果是/min:1000,則
複製不小於1000bytes的檔案。兩個引數可以同時使用,界定複製檔案大小的範圍。
範例四:只要這一週修改的檔案

[實現效果]這一週處理了哪些檔案?編輯了那些檔案?將這些修改了的檔案複製到一個資料夾下,再好好回味
一下。本例就是要將d:work中最近七天內新建或修改了的TXT、DOC、XLS、PPT等檔案,複製到e:look
目錄下。

[簡單命令]

robocopy d:work e:look /s *.txt *.doc *.xls *.ppt /maxage:7

[引數講解]/maxage:表示最遠修改時間的,修改時間比這個還要舊的檔案將不會被複制。/maxage:後可接數位
,也可以接日期,數位小於1900時表示天數,否則就得用YYYYMMDD來表示具體的日期
   如/maxage:20040210表示2004年2月10日後被修改的檔案才允許複製。與之相對應的引數
是/minage,表示最近修改時間,比這個時間新的檔案將不被複制。

[舉一反三]

robocopy d:work e:look /s *.txt *.doc *.xls *.ppt /maxage:7 /minage:1

則表示近七天內除今天外修改的檔案才允許被複制。
  與修改時間相對的還有最近存取時間,/maxage指最遠存取時間,比這個時間老的檔案將不被複制。
/minage是指最近存取時間,比這個時間新的檔案將不被複制。

範例五:我的檔案排排站

[實現效果]
  上例中複製時,所有的檔案都會帶來本身的路徑資訊,檔案是會將其所存放的資料夾也複製過來。
這給我們的翻閱檢視帶來很多不便,得單擊多層資料夾才能看到檔案,能不能將所有的檔案直接複製到
一個資料夾下呢?這個需要用XXCOPY來實現。

[簡單命令] 

xxcopy d:work e:look /s /in*.txt /in*.doc /sg /yy /da:2004-02-02 /DB:2004-02-10/DA:1997-01-01

[引數講解]
  此命令將d:work中從2004年2月2日到2月10生成的 TXT、DOC檔案全部直接複製到e:look目錄下,
不新建子資料夾,開啟e:look就能看到所有檔案。XXCOPY和Robocopy的語法引數還是有較大差異的,表
示指定檔案型別時,XXCOPY會用/in*.*,表示日期時/da為在指定時間後,/db為在指定時間前,日期的
表示為YYYY- MM-DD。
  另外,/sg表示複製檔案到同一資料夾,/yy表示在所有要求使用者應答的地方都自動認為是Yes,在執
行過程中不需要使用者干預。

範例六:完全克隆

[實現效果]
  我們一般採取的複製方式預設是增量複製,即根據檔案的大小、修改時間將原始檔夾裡的內容向目
標資料夾複製,久而久之,目標資料夾裡就可能存在大量源件夾裡早已經刪除且無用的檔案和資料夾。
如果要讓備份完全相同,即拷貝時刪除在目標資料夾裡存在但原始檔夾裡並沒有的檔案。
[簡單命令]

robcopy d:work e:look /mir

[引數講解]
  /mir的作用等同於/purge /e,/purge表示清理目標資料夾有而原始檔夾裡沒有的檔案(夾)。通過
這個命令,能保證原始檔夾和目標資料夾結構與檔案完全相同。這在建立映象備份時,非常有用。

範例七:移動檔案

[實現效果]
我們前面講的都是複製,如果我們要將資料夾移動到目標資料夾,如何操作呢?
[簡單命令]

robocopy d:work e:look /move /e

[引數講解]
  其中,/move表示移動。

範例八:我只要資料夾骨架

[實現效果]
  筆者的工作需要週期性地新建和整理大量的資料夾,每次的資料夾結構一樣,只是檔案不盡相同。
如果是以前,就得一個一個簡單重複去製作,而現在就不需要了。Robocopy和XXCOPY可以讓你輕鬆實現
複製資料夾結構。
  [簡單命令]

xxcopy d:work e:mystruct /t /yy /dl3

[引數講解]
  將d:work的三層資料夾結構複製到e:mystruct中。其中/t表示建立資料夾結構,/dl3表示複製的
資料夾結構為***,數位可以自行輸入,如果沒有此引數,預設建立整個資料夾結構。
  Robocopy建立資料夾相對要麻煩一些,/create引數不僅要建立結構,還要建立資料夾下所有檔案的
0位元組檔案,並非真正的結構,我們只好劍走偏鋒了。

robocopy d:work e:mystruct /e /lev:3 /minage:19000101

為Robocopy指定一個不可能建立檔案的時間,因為有引數/e 的作用,雖然沒有檔案符合要求(你機
器裡沒有早於1900年1月1日的檔案),但Robocopy還是會忠實地建立資料夾,這樣就達到了生成資料夾
結構的目的。另外,/lev:3表示複製資料夾的層級,同樣可以自行輸入。

範例九:隱藏檔案我不要

[實現效果]
  在預設狀態下,隱藏檔案是並不顯示的,但在複製的過程中,它還會隨著資料夾一起被複制。可不
可以將這些隱藏檔案排除在複製範圍之外呢?
  [簡單命令]

robocopy d:work e:back /e /xa:h

[引數講解]
  Robocopy支援對屬性進行操作。上面的命令將複製原始檔夾中全部檔案,但全部具有隱藏屬性的文
件將不會被複制。/xa:h,表示將具有隱藏屬性的排除出複製範圍,與之相對應的是/ia,表示包括只對
擁有指定屬性的執行操作。屬性有R:唯讀,A:存檔,S:系統,H:隱藏等幾種供選擇。
  [舉一反三]
  (1)此外,Robocopy還有/a+、/a-等引數對檔案屬性進行操作,分別表示在檔案被拷貝後為檔案添
加、去除某屬性。

robocopy d:work e:back /ia:rs  

表示只複製具有唯讀和系統屬性的檔案。
(2)robocopy c: d: /-a:rsh
  表示將檔案拷貝到D槽後,將拷貝生成的檔案的唯讀、系統、隱藏屬性去掉,以方便檢視和修改。

範例十:NTFS許可權跟著走

[實現效果]
在使用Windows 2000、Windows XP時,在多使用者使用一臺電腦時或管理伺服器時,經常要為資料夾
指定使用者存取和修改的許可權(如圖1,需要分割區為NTFS)。不過,用一般的複製方式無法保留我們設定的
許可權,這在伺服器備份時意味著我們得重新設定使用者許可權。不過,Robocopy可以讓我們在複製檔案的時
候,將屬性、使用者許可權、所有者都可以一併複製到目標資料夾中。

備份雙友鄰精彩5例-Robocopy和xxcopy全掌握
  [簡單命令]

robocopy d:work e:back /e /copyall

[引數講解]
  /copyall等於/copy:datsou,表示將所有原始檔夾的資訊複製到目標資料夾中,其中D:檔案資料,
A:檔案屬性,T:時間資訊,S:許可權資訊,O:所有者資訊,U:稽核資訊。
  [舉一反三]
  如果原始檔夾的許可權被修改,需要同樣更新目標資料夾的許可權時,我們不必再重複複製,只需輸入

robocopy d:work e:back /is /copy:sou

如果沒有/copy引數,預設為/copy:dat,沒有後面三項的資訊。

範例十一:集中備份到檔案伺服器

  [實現效果]
  希望每天能夠把相應資料備份到檔案伺服器上,以免資料丟失。
  [簡單命令]

robocopy d:work ctips_serverarticlesshare  /e /copyall

[引數講解]
從中可以看出,robocopy完全支援檔案伺服器共用資料夾資料的拷貝。
[舉一反三]

(1)如果我們建立了一個環境變數,如定義%databack%為ctips_serverarticlesback,那隻要輸
入相應的命令:robocopy d:work  %databack% /e /copyall 即可把d:work下的檔案全部備份到
ctips_serverarticlesback下。當然,如果ctips_serverarticlesback空間不夠時,只要更換環境
變數的值到其他資料夾,如ctips_serverarticles ewback,上述命令無需更改就可以反資料拷貝到新
的資料夾中。
(2)如果你只想把資料備份到共用資料夾中以你的機器名為名字的共用資料夾中,使用xxcopy會更
方便:xxcopy d:work  ctips_serverarticles/$HOST$ /e /yy 其中/$HOST$表示你的機器名,如你的
機器名為CTIPS_SYJ,那會把d:work 資料夾下的檔案拷貝到ctips_serverarticlesCTIPS_SYJ資料夾
下。如果你的機器名為CTIPS_MLB,那執行上述命令後就可以把d:work 資料夾下的檔案拷貝到
ctips_serverarticlesCTIPS_MLB資料夾下。由於同區域網內的機器名字不會相同,執行上述命令後就
可以保證資料不會被拷貝到同一資料夾下。

範例十二:一動就備份

  [實現效果]
  有些工作內容非常重要,需要時時刻刻注意備份,可是我們哪裡有這麼好記性和耐性呢?這事,還
是交給 Robocopy來做吧。Robocopy能時時監視要備份的資料夾,只要資料夾修改到一定時間和程式,
Robocopy就會立即開始備份。它會一直監視資料夾,除非使用者自己終止。
  [簡單命令]

robocopy d:work e:back  /e /copyall /mot:1 /mon:2

[引數講解]
  上述命令表示複製資料夾所有資訊到目標資料夾並進行監視。執行此命令後,命令提示字元視窗如圖2
所示。一旦時間過了一分鐘,並且原始檔夾至少有或2處以上的修改,Robocopy就會自動啟動另一個程序
,執行上述備份操作。Robocopy能監視原始檔夾結構、檔案和資料夾名稱、大小、最後修改時間,在這
裡,甚至連屬性和許可權等資訊被修改時,Robocopy也會記為修改次數。
備份雙友鄰精彩5例-Robocopy和xxcopy全掌握
  /mot後接的是時間(分鐘),是指Robocopy執行操作的最短時間;/mon後接的是最少檔案修改個數
。在監視過程中,會自動記錄時間和修改的次數,只有同時符合以上兩個條件時,Robocopy才開始執行
,執行完成後,這兩個資料會自動清零,並重新開始監視資料夾,除非使用者關閉命令提示字元視窗或按下
Ctrl+Break鍵。
  [舉一反三]
  如果你要開機就監視並備份相應資料夾,則可以把上述命令放到“啟動”組中。

範例十三:不到時間不備份

[實現效果]
  複製的過程總會佔用系統資源,如果能設定在自己不在電腦邊上的時候開始複製備份,就會方便得
多。比如,每天5:50下班,希望下班後,到達6點時,Robocopy自動開始備份相應資料。
  [簡單命令]

robocopy d:work e:back /e /rh:1800-1830

[舉一反三]
  執行後,複製操作將會等待至指定時間開始(如圖3)。其中,RH格式為/RH:hhmm-hhmm,指定
Robocopy開始的時間段,在這個時間段外,拷貝會被暫停。時間為24小時格式,4個數位長,從0000到
2359,而且兩個數位不能相同。
備份雙友鄰精彩5例-Robocopy和xxcopy全掌握

範例十四:計劃任務備份

以上的到時間備份、監視資料夾備份方式,每次重啟系統會都會要重新執行以上命令,還遠遠不夠
智慧,如果能和Windows的計劃任務配合,所有問題就迎刃而解了。以我們要在每天10:00自動呼叫
Robocopy開始監視備份資料夾為例,說一說計劃任務與Robocopy的攜手。
第一步:新建BAT檔案
新建一個批次檔autobak.bat,輸入如下命令
robocopy d:work e:back  /e /copyall  /mot:1 /mon:2
第二步:建立計劃任務
選擇“開始→設定→控制面板”,雙擊“任務計劃”圖示。把autobak.bat批次檔拖放到“任務計劃
”視窗,然後雙擊新生成的autobak.bat圖示,在彈出視窗中設定其屬性。
第三步:設定開始時間
切換到“日程安排”標籤,單擊“任務計劃”下拉選單框,從中選擇“每天”,“開始時間”設定為
10:00,單擊“高階”可以設定起止的日期(如圖4)。
通過上述設定後,到了設定的時間,機器就會自動備份執行批次檔,自動備份並監視資料夾。
備份雙友鄰精彩5例-Robocopy和xxcopy全掌握

範例十五:清理檔案也拿手

除了一般的複製功能,XXCOPY還有檔案清理功能,可以將不需要的檔案快速清理出硬碟。以下命令
會清除檔案和資料夾,請先建立測試資料夾掌握其操作後再對資料夾進行操作。
1.清除所有無用檔案
xxcopy  d:work*.tmp /s /h /yy /rs
/rs表示不復制而直接從原始檔夾中刪除指定檔案,/h表示指定隱藏和系統檔案。
2.清除資料夾
xxcopy  c: emp /rmdir /db:2002-01-01 /yy
刪除c: emp中在2002年1月1日前的修改的資料夾。
3.刪除空資料夾
xxcopy c: emp  /rmdir /sz:0 /yy
刪除c: emp下所有空資料夾,/sz:0指定大小為0的檔案(夾)。
4.刪除0位元組檔案
xxcopy c: emp*.*  /sz:0 /s /h /yy /rs
通過以上四種方式的組合,我們可以輕鬆實現對檔案及資料夾的整理工作。
最後,還有一幾個小技巧告訴你,希望能有利於你更好地使用XXCOPY和Robocopy。
★將命令變成任務
在Robocopy加上“/save:任務名”可以將當前操作記錄為任務檔案,通過“/job:任務名”就可以方便調
用,不需要再輸入一長串的命令了。此任務檔案可以用純文字編輯器(如記事本)來編輯。
★將複製備份過程錄下來
預設情況下,Robocopy的操作過程只是在命令提示字元中顯示,我們可以讓它把操作過程輸出為TXT檔案,
加上“/log:檔名.txt”即可。  

個人使用範例程式碼

同步備份

自己做了個同步備份本地檔案的指令碼,每天使用定時計劃任務執行

版本一:備份到指定資料夾

@echo off
cls
rem 原始檔夾和目標資料夾的路徑不能以斜線結尾「」
set sourceDir="D:_John個人檔案"
set destinationDirs="E:_Del2_John個人檔案"
set logFile=%0_log.txt


robocopy %sourceDir% %destinationDirs% /MIR /LOG+:%logFile%

版本二:同一源備份到多個目標資料夾

@echo off
cls
rem 原始檔夾和目標資料夾的路徑不能以斜線結尾「」
set sourceDir="D:_John個人檔案"
rem 目標資料夾可以指定多個,多個之間使用逗號分隔
rem 路徑中包括空格時,使用雙引號括起來。
set destinationDirs="E:_Del1_John個人檔案"
set destinationDirs="E:_Del2_John個人檔案","E:_Del3_John個人檔案"
set logFile=%0_log.txt
echo [%date% %time%] 初始化紀錄檔>%logFile%
echo,>>%logFile%
echo 紀錄檔已初始化:%logFile% & echo,

::robocopy %sourceDir% %destinationDirs% /MIR /LOG+:%logFile%
for %%a in (%destinationDirs%) do (
    echo   開始同步,從 %sourceDir% 到 %%a
    echo 開始同步,從 %sourceDir% 到 %%a >>%logFile%
    robocopy %sourceDir% %%a /MIR /LOG+:%logFile%
    echo,
)

查詢最近3天所有新增和修改過的檔案

把以下內容儲存為roboCopyTest.bat檔案

rem 查詢最近3天所有新增和修改過的檔案
robocopy d: E:_Delrobocopy_Project /maxage:3 /minage:0 /L /BYTES /fp /ts /s /ndl 
::/log:E:_Delrobocopy_Project_Log.csv & type E:_Delrobocopy_Project_Log.csv

或者在執行bat的時候如下:

roboCopyTest.bat >e:_delrobocopy_Project_Log.csv & type e:_delrobocopy_Project_Log.csv

備份檔案,並排除指定檔案和資料夾

@echo off&setlocal enabledelayedexpansion
Title 目錄自動同步程式
cls

rem 原始檔夾和目標資料夾的路徑不能以斜線結尾「」
set sourceDir="D:_John個人檔案"
set sourceDir="D:_johnLocalSvn"
rem 目標資料夾可以指定多個,多個之間使用逗號分隔
rem 路徑中包括空格時,使用雙引號括起來。
set destinationDirs="E:_Del1_John個人檔案"
set destinationDirs="E:_Del2_John個人檔案","E:_Del3_John個人檔案"
set destinationDirs="C:TmpTestDisk500G2CaresBackCares-bak20220401_RLocalSvn"
set destinationDirs="\192.168.1.60disk500G2CaresBackCares-bak20220401LocalSvn"

set logFile="%~0_log.txt"
echo [%date% %time%] 初始化紀錄檔,由 %0 程式寫入>%logFile%
echo,>>%logFile%
echo 紀錄檔已初始化:%logFile%&echo,

rem robocopy命令常用引數,以及是否把紀錄檔寫入檔案等
set para=/MIR /COPY:D /W:3 /XF *.tmp *.class /XD .vs .git .github .svn packages obj bin BackupTemp .idea 
::set para=%para% /LOG+:%logFile%

::robocopy %sourceDir% %destinationDirs% /MIR /LOG+:%logFile%
for %%a in (%destinationDirs%) do (
    echo [!date! !time!] 開始同步,從 %sourceDir% 到 %%a
    echo [!date! !time!] 開始同步,從 %sourceDir% 到 %%a >>%logFile%
    robocopy %sourceDir% %%a %para%
    echo,&echo,[!date! !time!] 完成同步,從 %sourceDir% 到 %%a
    echo,[!date! !time!] 完成同步,從 %sourceDir% 到 %%a >>%logFile%&echo,>>%logFile%
    echo,&echo,------------------------&echo,
)
pause

到此這篇關於robocopy命令用法範例解析的文章就介紹到這了,更多相關robocopy命令用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com