Robocopy jest jednym z najczęściej używanych narzędzi wiersza poleceń do kopiowania dużych ilości danych w systemie Windows. Jest to takie popularne narzędzie ze względu na jego moc. Ale z całą tą mocą przychodzi złożoność. W tym przewodniku omówimy całą tę złożoność i przedstawimy kompletny samouczek na temat korzystania z tego użytecznego narzędzia.
Robocopy jest narzędziem wiersza poleceń systemu Windows, które jest dostępne od Windows NT. Jest to zamiennik mniej wszechstronnego narzędzia xcopy. Pozwala określić ścieżkę dysku lub ścieżkę serwera do kopiowania / przenoszenia plików w wierszu polecenia.
Wersja Robocopy w chwili pisania tego tekstu jest do 10.0.18. To jest wersja, na której testowałem.
Robocopy oferuje mnóstwo funkcji, które możesz wykorzystać do wydajnego i szybkiego kopiowania i przenoszenia plików. Może:
- Kopiuj pliki przez sieć z możliwościami wznowienia
- może pominąć punkty przyłączeniowe NTFS powodujące awarię zazwyczaj z nieskończonych pętli
- może kopiować atrybuty plików i katalogów zachowując znaczniki czasu
- może kopiować uprawnienia NTFS, właścicieli i informacje kontrolne
- może kopiować znaczniki czasu katalogu
- Kopiuj pliki w trybie 'backup’, aby upewnić się, że pliki są kopiowane, nawet te prawa zostały odrzucone administratorowi
- automatyczne powtórzenia
- może zsynchronizować dwa foldery
- jest wystarczająco inteligentny, aby pominąć pliki już skopiowane
- może kopiować ścieżki większe niż limit 256 znaków
- wykonywać kopie asynchroniczne przy użyciu zdolności wielowątkowej.
- zwraca standardowe kody wyjścia do użycia w skryptach
jak widzisz, Jest wiele do skopiowania. Chciałem pokryć wszystko, co musisz wiedzieć o tym poręcznym narzędziu.
spis treści
Common Robocopy Syntax Reference
dlaczego tak długi post na blogu o jednym narzędziu? Po prostu naciesz Oczy poniższymi tabelami. Masz wiele opcji kopiowania lub przenoszenia plików z robocopy! Będziesz więcej opcji w poszczególnych sekcjach.
te tabele zostały zbudowane ze składni pomocy zwróconej z robocopy /?
. Zostały one podzielone na bardziej znaczące sekcje, dodawane z czasem i czyszczone, aby zapewnić więcej przydatnych informacji.
opcje źródłowe
Przełącznik | Wyjaśnienie | zachowanie domyślne | równoważny Przełącznik | uwagi |
/s | Kopiuj podfoldery | |||
/E | Kopiuj podfoldery, w tym puste podfoldery | |||
/COPY: | Copy options | / COPY: DAT | D=Dane, A=atrybuty, T=znaczniki czasu S=bezpieczeństwo=NTFS ACL, O=Informacje o właścicielu, U = informacje o audycie. Dane pliku (D) zawsze zawierają znaczniki czasu Pliku (T) | |
/SEC | Kopiuj pliki z zabezpieczeniami | /Kopia: DATS | ||
/DCOPY: T | Kopiuj znaczniki czasu katalogu | |||
/COPYALL | skopiuj wszystkie informacje o pliku | /Kopiuj: DATSOU | zapobiegnie to odwadnianiu plików offline i zamiast tego skopiuje znacznik pliku (przynajmniej w systemach emc VNX / Unity). Nie jest to oficjalnie udokumentowane! Jeśli potrzebujesz odwodnienia (powód, dla którego znalazłem ten problem), nie możesz skopiować ACL wzdłuż plików. Autor: Monsieurx (Reddit) | |
/NOCOPY | Kopiuj brak informacji o pliku | przydatne z / Czyszczenie | ||
/a | kopiuje tylko pliki z ustawionym atrybutem Archiwum | |||
/m | lubi /a, ale usuwa atrybut archiwum z plików źródłowych | |||
/Lew:n | kopiuje tylko górne N poziomów drzewa źródłowego | |||
/MAXAGE: n | Maksymalny wiek pliku-wyłącz pliki starsze niż n dni/data | |||
/MINAGE: n | minimalny wiek pliku-wyklucz pliki nowsze niż n dni / data | If n < 1900 then n = liczba dni, else n = data RRRRMMDD | ||
/FFT | zakładaj czasy plików FAT | 2-druga ziarnistość daty / czasu. Zastępuje znaczniki czasu NTFS. Wydaje się być bardziej niezawodny podczas przesyłania przez sieć. | ||
/256 | wyłącz obsługę bardzo długiej ścieżki (> 256 znaków) |
opcje docelowe
Przełącznik | Wyjaśnienie | zachowanie domyślne | równoważny Przełącznik | uwagi |
/a+: | Ustaw atrybuty plików na plikach docelowych + dodaj | |||
/A-: | Usuń atrybuty pliku w plikach docelowych | |||
/FAT | Utwórz pliki docelowe za pomocą 8.3 tylko nazwy plików FAT | |||
/Utwórz | Utwórz strukturę drzewa katalogów + tylko pliki o zerowej długości | |||
/DST |
Opcje kopiowania
Przełącznik | Wyjaśnienie | zachowanie domyślne | równoważny Przełącznik | uwagi |
/L | Wyświetl tylko pliki | nie kopiuj, znacznik czasu ani nie usuwaj żadnych plików | ||
/MOV | Przenieś pliki | Usuń ze źródła po skopiowaniu | ||
/przenieś | Przenieś pliki i katalogi | Usuń ze źródła po skopiowaniu | ||
/SL | skopiuj dowiązania symboliczne pliku zamiast docelowego | |||
/Z | Kopiuj pliki w trybie restartu | Przetrwaj sieć usterka | ||
/B | Kopiuj pliki w trybie kopii zapasowej | |||
/J | Kopiuj za pomocą niebuforowanych We / Wy | zalecany do dużych plików | ||
/NOOFFLOAD | kopiowanie plików bez użycia mechanizmu Windows copy offload | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | Kopiuj zaszyfrowane pliki w trybie RAW EFS | |||
/TIMFIX | napraw czasy plików na wszystkich plikach, nawet pominiętych plikach | |||
/XO | Wyklucz starsze | jeśli plik docelowy istnieje i jest tej samej daty lub nowszy od źródła – nie przejmuj się nadpisywaniem go. | ||
/XC | Wyklucz zmienione pliki | |||
/Xn | Wyklucz nowsze pliki | |||
/XX | wyklucz pliki obecne w miejscu docelowym, ale nie źródłowe | /XX | ||
/plik XF … | wyklucz pliki pasujące do podanych nazw / ścieżek/symboli wieloznacznych | |||
/XD dirs … | wykluczają katalogi pasujące do podanych nazw / ścieżek. | /XF i / XD mogą być używane w połączeniu np. ROBOCOPY c:\source d:\dest / XF *.doc *.xls / XD c:\unwanted / S | ||
/IA: | dołączaj pliki z dowolnym z podanych atrybutów | |||
/Xa: | wyklucz pliki z dowolnym z podanych atrybutów | |||
/IM | Nadpisz zmodyfikowane pliki. Obejmuje to te same pliki z różnymi czasami. | |||
/czy | nadpisuje pliki, nawet jeśli są już takie same | |||
/to | włącza poprawione pliki | |||
/XJ | Wyłącz punkty przyłączeniowe ze źródła | / XJ | ||
/XJD | Wyklucz punkty przyłączeniowe z katalogów źródłowych | |||
/XJF | Wyłącz punkty przyłączeniowe z pliki źródłowe | |||
/MAX: n | wyklucz pliki większe niż n bajtów | |||
/MIN: n | wyklucz pliki mniejsze niż n bajtów | |||
/MAXLAD: n | wyklucz pliki nieużywane od n | |||
/MINLAD:n | wyklucz pliki używane od n | If n < 1900 then n = n days, else N = YYYYMMDD date | ||
/MIR | Mirror a directory tree | /PURGE / E | ||
/Wyczyść | Usuń pliki/foldery dest, które już nie istnieją w źródle | |||
/XL | wyklucz pliki obecne w źródle, ale nie docelowe | |||
/SECFIX | plik poprawek Robocopy /secfix bezpieczeństwo wszystkich plików, nawet pominiętych plików. | Określ typ informacji zabezpieczających, które chcesz skopiować, korzystając również z jednej z następujących opcji: / COPYALL / COPY: O / COPY: S / COPY: U / SEC | ||
/ZB | Użyj trybu restartowania; jeśli brak dostępu użyj trybu kopii zapasowej |
opcje monitorowania
Przełącznik | Wyjaśnienie | zachowanie domyślne | równoważny Przełącznik | uwagi |
/R:n | liczba powtórzeń nieudanych kopii | /R:1000000 | zawsze staraj się ustawić tę opcję. Polecam ustawienie tego na 10-20, aby nie tracić czasu na ponowną próbę. | |
/W: n | czas oczekiwania między kolejnymi próbami | / W:30 | zawsze staraj się ustawić tę opcję na niższą liczbę, aby spróbować szybciej. Sugeruję 5-10. | |
/REG | Zapisz /R:n i /w:n w rejestrze systemu Windows jako ustawienia domyślne | |||
/RH:hhmm-hhmm | czasy, kiedy można uruchamiać nowe kopie | |||
/TBD | poczekaj na zdefiniowanie sharenames | powtórz błąd 67 | ||
/PF | Sprawdź godziny pracy na podstawie pliku (nie na przepustkę) | |||
/pon: n | Uruchom ponownie, gdy zobaczysz więcej niż n zmian | |||
/MOT:m | Uruchom ponownie za m minut, jeśli zostanie zmieniony |
zrozumienie zachowania Robocopy
całkowicie rozwaliłem twój umysł wszystkimi możliwymi opcjami składni dostępnymi dla ciebie. Zobaczmy teraz wszystkie różne kombinacje tego, jak możemy użyć tej składni.
mógłbym dostarczyć Ci ogromnie długą listę poleceń robocopy z ciągle rosnącą liczbą przełączników. Ale myślę, że lepiej nauczyć cię łowić ryby. Przyjrzyjmy się, jak wyciągnąć sens z tych wszystkich opcji.
Robocopy kopiuje tylko całe katalogi
każde wykonanie robocopy będzie miało katalog źródłowy i docelowy. Robocopy kopiuje i przenosi pliki przez cały katalog. Nie jest możliwe jawne skopiowanie pojedynczego pliku za pomocą robocopy. Użyj copy
lub PowerShell Copy-Item
do tego.
możesz jednak robocopy pojedynczego pliku z odpowiednim filtrowaniem, o którym dowiesz się poniżej. Aby wykonać robocopy pojedynczego pliku, określ katalog źródłowy i docelowy, a następnie nazwę pliku w źródle.
> robocopy c:\src d:\dst copythisfile.txt
składnia zależy od środowiska
również opcje podane w robocopy zależą od środowiska. Musisz odpowiedzieć na kilka pytań, próbując dowiedzieć się, których opcji użyć.
- Czy zawsze będziesz kopiował do pustego katalogu?
- czy możliwe, że pliki mogą już istnieć w katalogu docelowym?
- będziesz kopiował terabajty danych czy tylko kilka megabajtów?
- czy będziesz kopiował pliki przez sieć czy lokalnie?
- … i nie tylko.
jeśli w katalogu docelowym nie ma plików, nie powinieneś przejmować się opcjami nadpisującymi pliki. Jeśli nie będziesz kopiować plików przez sieć, nie martw się o te opcje. Jasno określ swoje obecne i potencjalne przyszłe okoliczności, w których będzie się znajdować twoje środowisko.
Rozpoznaj Domyślne opcje
Robocopy domyślnie używa wielu opcji. Możesz je wybrać, patrząc na tabele powyżej. Zapewnia również przydatne dane wyjściowe za każdym razem, gdy uruchamiasz narzędzie.
poniżej widać, że kiedy uruchomiłem robocopy z jego najbardziej podstawowymi opcjami (folder źródłowy i docelowy), automatycznie użył niektórych opcji. Zrozumienie domyślnego zachowania jest ważne.
odwołaj się do opcji, które widzisz na wyjściu, z wyjaśnieniami opcji powyżej, a zrozumiesz dokładnie, co robocopy robi pod przykrywką.
zrozumienie, co mogą zrobić polecenia Robocopy
jeśli używałeś poleceń cmdlet copy
lub poleceń polecenia PowerShell Copy-Item
, prawdopodobnie podałeś źródło i miejsce docelowe i kontynuowałeś swój dzień. Nie ma tam zbyt wielu opcji, które można skonfigurować. Te polecenia robocopy mają domyślne zachowanie.
ale robocopy, z drugiej strony, rozumie o wiele więcej i daje Ci elastyczność, aby dostosować zachowanie tak bardzo, jak chcesz.
ważne jest, aby wiedzieć, że robocopy nie jest tylko świadomy pojęcia pliku lub katalogu. W systemie plików jest o wiele więcej, a robocopy obsługuje prawie wszystko.
plik znajdujący się na systemie plików to nie tylko głupi obiekt o jednym celu. Istnieje wiele różnych atrybutów i rzeczy, które idą z pojęciem pliku. Na przykład plik ma atrybuty takie jak:
- znacznik czasu (napisany, zmodyfikowany i dostępny)
- NTFS ACL
- właściciel
- informacje kontrolne NTFS
- ukryta flaga
- flaga zarchiwizowana
podczas kopiowania lub przenoszenia plik, masz możliwość, aby przynieść wszystkie te rzeczy wraz z nim, jeśli chcesz.
zrozum, że gdy uruchamiasz robocopy, nie tylko kopiujesz plik, ale także potencjalnie kopiujesz za jego pomocą wszystkie inne informacje. Ważne jest, aby zdać sobie z tego sprawę i uwzględnić to w opcjach, które udostępniasz robocopy.
Podstawy: Wykonywanie scenariuszy WhatIf
jeśli masz gdzieś ogromny serwer plików, który chcesz przenieść i nie chcesz jeszcze podejmować żadnych działań, możesz użyć robocopy, aby zwrócić to, co zrobiłby.
korzystając z opcji /L
, możesz powiedzieć robocopy, aby wyliczył wszystkie pliki i/lub foldery, które podałeś i zwrócił listę plików, które zostałyby skopiowane/przeniesione.
możesz użyć opcji /L
z dowolną inną opcją. Jest to świetny sposób na zwrócenie wszystkich opcji, których robocopy użyłby (domyślnie lub nie). Daje to ogólny obraz tego, co robocopy zrobi, biorąc pod uwagę opcje, które mu podałeś.
podstawy: kopiowanie plików
najbardziej podstawowym zastosowaniem robocopy jest użycie katalogu źródłowego i docelowego bez opcji.
> robocopy C:\src C:\dst
ta opcja skopiuje wszystkie pliki (z wyjątkiem podfolderów) z C:\src na C:\dst.
możesz również skopiować wszystko, w tym podfoldery (puste lub nie) i uprawnienia NTFS. Jest to, z tego co mogę powiedzieć, metoda dosłownie kopiowania wszystkiego, co dotyczy katalogu plików do innego katalogu.
poniżej kopiuję wszystkie ACL NTFS, właścicieli plików, podfoldery (w tym puste) i wszystkie atrybuty pliku. Wszystko to jest możliwe dzięki opcji /E
, która zawiera wszystkie puste podfoldery i /COPYALL
, aby złapać resztę.
> robocopy C:\src C:\dst /E /COPYALL
podstawy: przenoszenie plików
przenoszenie plików przenosi pliki z jednego katalogu do drugiego, tak jak robi to kopiowanie. Jedyną różnicą w przypadku operacji przenoszenia jest to, że pliki źródłowe są usuwane po skopiowaniu.
aby usunąć pliki/katalogi ze źródła po skopiowaniu, użyj opcji /MOV
. Spowoduje to usunięcie wszystkich plików w podanym katalogu (bez podfolderów).
> robocopy C:\src C:\dst /MOV
możesz również użyć /MOVE
, aby przenieść wszystkie pliki i podfoldery.
> robocopy C:\src C:\dst /MOVE
podstawy: Synchronizacja plików
Robocopy pozwala na synchronizację dwóch katalogów. Oznacza to albo upewnienie się, że wszystkie pliki w katalogu docelowym znajdują się w katalogu źródłowym, a nie więcej. /MIR
skopiuje dane kopiując wszystkie pliki w źródle Nie w miejscu docelowym i usunie pliki w miejscu docelowym nie w źródle. Uważaj!
> robocopy C:\src C:\dst /MIR
kopiowanie plików przez sieć
jeśli kopiujesz pliki przez sieć, powinieneś rozważyć kilka opcji.
Robocopy pozwala na kopiowanie plików w „trybie restartu” przy użyciu opcji /Z
. Oznacza to, że jeśli plik rozpocznie kopiowanie i zawiedzie w połowie, Kopia może rozpocząć się ponownie, zamiast całkowicie. Opcja /Z
jest przydatna, gdy strumień zostaje przecięty przez sieć.
Ostrzeżenie: niektórzy donoszą, że użycie
/Z
obniża wydajność o 1/4. Daj mi znać swoje ustalenia.
Możesz również użyć opcji /FFT
. Wiadomo, że ten przełącznik dokładniej zachowuje znaczniki czasu podczas przesyłania przez sieć. Ta opcja używa znaczników czasu systemu plików FAT zamiast NTFS.
robocopy C:\src \SRV1\share /Z /FFT
używanie /IPG do kontrolowania luki między pakietami
podczas kopiowania plików przez sieć można użyć przełącznika /IPG
. Jest to również znane jako opcja luki między pakietami. Opcja ta definiuje (w milisekundach) częstotliwość, z jaką robocopy będzie czekał pomiędzy wysłaniem nowych pakietów.
Zawsze używaj ścieżek UNC, a nie liter dysku
czytelnik na Reddicie odkrył trudny sposób, aby nie używać zmapowanych dysków jako katalogu docelowego. Zamiast tego Zawsze używaj Zawsze używaj ścieżki UNC. Jeśli to zrobisz, możesz napotkać problemy z limitem 256 znaków. Sprawdź ten dokument Microsoft, aby uzyskać więcej informacji.
Robocopy Backup Mode (Robocopy /z)
Robocopy ma opcję (/B
) lub jako backup do trybu restartu (/ZB
), która kopiuje pliki w trybie backupu. Co to jest” tryb kopii zapasowej ” w ogóle?
gdy Zwykle kopiujesz plik w systemie Windows i uderzasz w plik, który wymaga uprawnień administratora, aby uzyskać dostęp, pojawi się błąd wskazujący, że nie masz uprawnień. Nawet jeśli jesteś administratorem lokalnym, System Windows nie pozwoli ci uzyskać do niego dostępu.
ostrzeżenie: podczas kopiowania danych na serwer Windows Server 2016 z włączoną duplikacją pojawiły się raporty o uszkodzonych woluminach serwera. Gdy użyjesz przełącznika
/ZB
, w informacji o woluminie systemowym zostanie zniszczony magazyn dedup. Skopiowane pliki nie będą czytelne i wygenerują błędy podczas próby manipulowania nimi. Serverfault link z Więcej informacji.
Tryb tworzenia kopii zapasowych to sposób na dostęp do plików bez obawy o uprawnienia.
Robocopy korzysta z trybu kopii zapasowej, aby używać SeBackupPrivilege do odczytu plików oraz prawa użytkownika SeRestorePrivilege do dostępu do wszelkich plików, których potrzebuje. Ignoruje to wszelkie Asy, które normalnie uniemożliwiałyby dostęp do tych plików.
prawa użytkownika SeBackupPrivilege i SeRestorePrivilege są zwykle przypisywane użytkownikom w grupach operatorów kopii zapasowych i administratorów, ale czasami mogą zostać usunięte. Moduł backupu eliminuje to ryzyko i tymczasowo przyznaje Użytkownikowi wykonującemu robocopy te prawa.
jeśli chcesz sprawdzić, czy Twoje konto użytkownika ma to prawo, możesz uruchomić whoami /priv
i oba prawa powinny być wyświetlone.
filtrowanie plików i folderów
zdecydowana większość dostępnych opcji polega na wykluczeniu plików i katalogów na wiele różnych sposobów. Podzieliłem wszystkie sposoby filtrowania lub wykluczania plików i katalogów na podstawie różnych kryteriów.
według nazwy pliku lub rozszerzenia pliku
filtrowanie plików, które zostaną skopiowane/przeniesione w wywołaniu robocopy odbywa się za pomocą symboli wieloznacznych. Możesz użyć symbolu wieloznacznego do filtrowania plików pasujących do określonego ciągu lub rozszerzenia nazwy pliku.
na przykład, aby skopiować tylko pliki TXT, możesz określić *.txt.
> robocopy C:\src C:\dst *.txt
jeśli chcesz ograniczyć tylko pliki zaczynające się od a, możesz użyć*.
> robocopy C:\src C:\dst a*
Y0u może również dostarczyć wiele zestawów dopasowań nazw plików, oddzielając je spacją, jak pokazano poniżej.
> robocopy C:\src C:\dst a* b*
kiedy filtrujesz według nazwy pliku, robocopy pokaże Ci filtr na wyjściu.
według nazwy katalogu
Robocopy pozwala na filtrowanie elementów nie tylko według Pliku, ale także według nazwy katalogu. Używając robocopy /xd
, możesz wykluczyć niektóre katalogi pasujące do określonej nazwy.
podczas kopiowania wielu folderów użyj przełącznika /XD
, aby wykluczyć foldery z biegu.
> robocopy C:\src C:\dst /XD "c:\src\exclude"
według znacznika czasu Pliku/katalogu
Poniżej znajdziesz wszystkie opcje robocopy, które wykluczają pliki i foldery na podstawie różnych atrybutów znacznika czasu.
Switch | |
/ DCOPY: T | Kopiuj znaczniki czasu katalogu |
/MAXAGE: n | wyklucz pliki starsze niż n dni / data |
/MINAGE:n | wyklucz pliki nowsze niż n dni / data |
/XO | Jeśli plik docelowy istnieje i jest tej samej daty lub nowszy niż Źródło, nie nadpisuj |
/XN | jeśli plik docelowy istnieje i ma tę samą datę lub jest starszy niż Źródło, nie nadpisuj |
istnieją dwie popularne opcje do wyboru podczas filtrowania rzeczy takich jak znacznik czasu; /XO
i /MAXAGE
.
/XO
pozwala wykluczyć pliki z kopii tylko wtedy, gdy są nowsze niż Źródło. Korzystając z opcji /XO
, możesz kopiować tylko nowe pliki według daty dostępu.
> robocopy C:\src C:\dsc /XO
jeśli znasz maksymalny wiek plików, możesz również użyć opcji /MAXAGE
. Pozwala to określić w formacie YYYMMDD starszą datę pliku przed jego skopiowaniem.
> robocopy c:\src c:\dst /S /MAXAGE:20191001
Robocopy Jobs
widziałeś, że dostępnych jest kilkadziesiąt opcji. Łatwo jest te opcje szybko stać się nieporęczne. Na szczęście masz lepszą opcję niż zapamiętywanie i zapewnienie, że wszystkie te opcje są na miejscu za każdym razem.
pliki Zadań Robocopy są plikami tekstowymi zawierającymi jedną opcję w wierszu. Do tworzenia tych plików zadań zwykle używa się robocopy. Po utworzeniu możesz użyć robocopy do ich modyfikacji lub prostego edytora tekstu.
masz różne polecenia robocopy, które działają z zadaniami.
Przełącznik | Wyjaśnienie | zachowanie domyślne | równoważny Przełącznik | uwagi |
/zadanie: Nazwa zadania | pobieraj parametry z nazwanego pliku zadania | |||
/Zapisz:Nazwa zadania | Zapisz parametry do nazwanego pliku zadania | |||
/Zakończ | Zakończ po przetworzeniu wiersza poleceń | przydatne do przeglądania parametrów | ||
/NOSD | Nie podano katalogu źródłowego | |||
/NODD | Nie podano katalogu docelowego | |||
/jeśli | Dołącz następujące pliki |
typowy plik zadań utworzony za pomocą robocopy ma rozszerzenie RCJ i wygląda jak Poniższy fragment. Ten plik został utworzony przez uruchomienie robocopy C:\src D:\dst /save:myjob
. Możesz zobaczyć, że możesz dodawać komentarze w pliku zadania za pomocą ::
, co stanowi większość tego pliku.
bez komentarzy plik zawierałby tylko jedną opcję w wierszu.
:::: 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 :::
zapisywanie plików Zadań
Zapisywanie pliku zadań jest tak proste, jak dołączenie opcji /SAVE:<jobname>
na końcu składni. Zastąp <jobname>
nazwą zadania. Opcja /SAVE
utworzy plik o nazwie <jobname>.rcj w katalogu, w którym uruchomiłeś robocopy.
> robocopy C:\src C:\dst /SAVE:myjob
jako ostatnią opcję należy podać /SAVE
. Wszystkie opcje podane po /SAVE
nie zostaną dodane do pliku zadania. Zauważ również, że nawet jeśli istniejący plik zadania już istnieje, robocopy zawsze nadpisze istniejący plik. Tworzenie kopii zapasowych lub kontrola wersji plików zadań!
Uwaga: Jeśli spróbujesz użyć opcji
/MT
podczas zapisywania do pliku zadania, nie będzie on w pliku zadania. Daj mi znać, jeśli udało ci się to włączyć.
używanie Plików Zadań
gdy zadanie zostanie zapisane w pliku zadania, możesz użyć opcji /JOB:<jobname>
, aby określić plik zadania do odczytania. Robocopy odczytuje wszystkie parametry wewnątrz pliku zadania. Następnie wykonuje się tak, jakbyś podał opcje bezpośrednio w wierszu poleceń.
> robocopy /JOB:myjob
Tworzenie pliku zadania bez uruchamiania zadania za pomocą /QUIT
cel opcji /QUIT
nie jest oczywisty. Na powierzchni można pomyśleć, że /QUIT
zmusza bieg do wyjścia. Zamiast tego /QUIT
działa bardziej jak opcja uniemożliwiająca uruchamianie zadania.
oficjalnie opcja /QUIT
wymusza na robocopy zakończenie przetwarzania wiersza poleceń. Jednak byłoby to lepiej wyjaśnione jako tworzenie pliku pracy bez uruchamiania zadania.
jeśli użyjesz opcji /SAVE
, zadanie zostanie uruchomione automatycznie. Nie ma sposobu, aby utworzyć plik zadania bez uprzedniego uruchomienia zadania. Możesz utworzyć plik zadania RCJ za pomocą edytora tekstu lub możesz użyć robocopy do It, dodając /QUIT
na końcu.
> robocopy C:\src C:\dst /SAVE:myjob /QUIT
edytowanie pliku zadania
Ponieważ pliki zadań są tylko plikami tekstowymi, możesz je edytować za pomocą ulubionego edytora tekstu lub możesz poprosić robocopy o zrobienie tego za Ciebie.
możesz edytować pliki zadań za pomocą kombinacji /JOB
, /SAVE
i /QUIT
.
na przykład, być może chcesz wykluczyć wszystkie pliki EXE z zadania robocopy zapisane w pliku zadania o nazwie backupfiles.rcj. Masz już utworzony plik zadania i nie chcesz nadpisać całości. Możesz dodać nową opcję, jak poniżej:
> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT
używając wielu plików Zadań
możesz nawet połączyć użycie plików zadań. Podczas określania wielu plików zadań w tym samym uruchomieniu wszystkie opcje użyte w tym uruchomieniu zostaną połączone razem.
na przykład, być może masz dużą listę plików do wykluczenia z zadania kopiowania plików kopii zapasowych. Otwórz edytor tekstu i dodaj następujące elementy, aby utworzyć wykluczenie.plik rcj.
/XF a.exe b.txt c.cer
możesz następnie wykluczyć te pliki z zadania backupfiles w ten sposób:
> robocopy /JOB:backupfiles /JOB:exclude
ponieważ oryginalny plik zadania backupfiles był już wyłączony z wszystkich plików EXE, składnia powyższego uruchomienia wyglądałaby na /XF *.exe a.exe b.txt c.cer
. Robocopy łączy wszystkie opcje w jedną.
Szablony Robocopy i korzystanie z opcji /NOSD i /NODD
jeśli pracujesz z dużą ilością plików zadań, możesz zbudować pliki zadań, aby akceptowały parametry. Robocopy pozwala na przekazywanie wartości z wiersza poleceń do zadań, gdy są one uruchamiane. Parametr nie jest terminem robocopy, ale dobrze pasuje do tego scenariusza.
możesz budować zadania robocopy tak, aby akceptowały parametry, nie określając katalogu źródłowego ani docelowego ani jawnie używając opcji /NOSD
i /NODD
lub po prostu nie podając w ogóle katalogu źródłowego i docelowego.
w prostym przykładzie Utwórz plik zadania bez źródła lub miejsca docelowego, używając poniższej składni. Intencją tego zadania jest skopiowanie wszystkich plików TXT i EXE ze źródła do katalogu docelowego.
> robocopy *.txt *.exe /SAVE:backupfiles /QUIT
samo zadanie nigdy nie zadziała, ponieważ nie określono katalogu źródłowego ani docelowego.
podczas tworzenia zadania bez katalogu źródłowego i docelowego plik zadania jest automatycznie tworzony przy użyciu opcji /NOSD
i /NODD
.
/NOSD /NODD/IF *.txt *.exe/DCOPY:DA/COPY:DAT/R:1000000/W:30
opcje /NOSD
mówią robocopy, że nie dodałeś katalogu źródłowego, podczas gdy /NODD
oznacza, że nie dodałeś katalogu docelowego. Ten plik zadań jest „szablonem”dla innych zadań.
ale możesz przekazać „parametry” do tego pliku zadania, aby podać katalogi źródłowe i docelowe.
aby użyć właśnie utworzonego pliku zadania do skopiowania plików z C:\src do C:\ dst, możesz przekazać te katalogi bezpośrednio w wierszu poleceń, które następnie zostaną przekazane do zadania .
> robocopy /JOB:backupfiles C:\src C:\dst
asynchroniczne kopiowanie (Robocopy /MT)
domyślnie robocopy przetwarza tylko jeden plik na raz. Możesz jednak zmusić robocopy do skopiowania większej liczby plików niż na raz, używając opcji /MT
.
opcja /MT
pozwala określić liczbę wątków, których robocopy będzie używał do kopiowania plików. Maksimum to 128.
możesz użyć /MT
tak:
> robocopy C:\src C:\dst /MT:32
wybrałem 32 w tym przypadku jako punkt odniesienia. Proponuję zacząć od 32, aby zobaczyć, jak Twój komputer i sieć radzą sobie z rzeczami i odpowiednio dostosować wątki.
zauważ, że jeśli użyjesz
/MT
, nie będziesz mógł użyć/IPG
lub/EFSRAW
. Aby uzyskać lepszą wydajność, nie wysyłaj dziennika do konsoli. Zamiast tego użyj/LOG
.
planowanie Robocopy
Robocopy ma kilka sposobów planowania, gdy jest uruchomiony.
używając /RH
używając opcji /RH
, możesz powiedzieć robocopy, aby działał tylko w określonym czasie. Jest to świetne, jeśli masz okno konserwacji lub czas, kiedy wszyscy poszli do domu na cały dzień.
możesz określić czas rozpoczęcia i czas zakończenia w formacie HHMM-HHMM. Na przykład, aby wywołać robocopy, ale pozwolić mu działać tylko między godzinami 17: 00 a 9: 00, zgodnie z zegarem systemowym, Uruchom:
> robocopy C:\src C:\dst /RH:1700-0900
zobaczysz, że jeśli wywołasz robocopy poza tymi godzinami, to powie Ci aktualny czas i czekać na czas uruchomienia.
musisz upewnić się, że oba czasy są w formacie 24-godzinnym i mają dokładnie cztery cyfry. Okno musi być większe niż dwie minuty.
domyślnie użycie /RH
sprawdzi czas rozpoczęcia przed całym uruchomieniem. Jeśli jednak masz dużo plików i uważasz, że proces może trwać dłużej, możesz użyć opcji /PF
. /PF
zmusi robocopy do sprawdzenia okna przed każdym plikiem.
używając Harmonogramu zadań
Dziennik wyjściowy
Robocopy zawsze zwróci dziennik wyjściowy. To, czy dziennik zostanie wyświetlony na konsoli poprzez standardowe wyjście, czy też zostanie przekierowany do pliku dziennika, zależy od Ciebie.
masz wiele opcji podczas wyświetlania wyjścia robocopy.
Przełącznik | Wyjaśnienie | zachowanie domyślne | równoważny Przełącznik | uwagi |
/NP | brak postępu. Tłumi wyświetlanie informacji o postępach. Może to być użyteczne, gdy wyjście jest przekierowywane do pliku. | |||
/unicode | wyświetl wyjście stanu jako tekst unicode | |||
/LOG: plik | wyjście stanu do pliku dziennika i nadpisanie | |||
/UNILOG: plik | wyjście stanu do pliku dziennika unicode i nadpisanie | |||
/LOG+:plik | wyjście stanu do pliku dziennika i dołączenie do istniejącego pliku dziennika | |||
/UNILOG+: plik | wyprowadza stan do pliku dziennika unicode i dołącza do istniejącego pliku dziennika | |||
/TS | wyświetla znaczniki czasu dla każdego przetwarzanego pliku. | |||
/FP | zastępuje proste nazwy plików pełnymi ścieżkami plików na wyjściu. | |||
/NS | nie pokazuje rozmiarów plików. | |||
/NC | ukrywa wyjście klasy pliku ” znaczniki tekstowe „(Przejdź tutaj, aby uzyskać więcej informacji: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | ukrywa nazwy plików. Błędy są jednak nadal rejestrowane. Wszelkie pliki pliki usunięte lub zostaną usunięte, jeśli /L został pominięty, są zawsze rejestrowane | |||
/NDL | ukrywa wyjście listy katalogów. Pełne nazwy ścieżek do plików są wyprowadzane w celu łatwiejszego śledzenia problematycznych plików. | |||
/TEE | wyjście do okna konsoli, a także plik dziennika | |||
/NJH | brak nagłówka pracy | |||
/NJS | brak podsumowania pracy | |||
/bajty | rozmiary wydruku jako bajty | |||
/X | zgłoś wszystkie pliki, nie tylko te wybrane & skopiowane | |||
/V | generuje obszerny dziennik wyjściowy, pokazujący pominięte pliki | |||
/eta | pokazuje szacowany czas przybycia skopiowanych plików. Zobacz czas rozpoczęcia każdej kopii pliku i szacowany czas zakończenia na podstawie obserwowanej przepustowości poprzednich kopii. Czasy są wyświetlane po nazwie pliku w formacie HH: MM – > HH: MM (start – > finish). | |||
/Debuguj | Pokaż informacje o woluminie debugowania |
ograniczenie elementów dziennika z /NJS i / NJH
domyślnie, robocopy zwraca dwa elementy na wyjściu, nagłówek zadania i Podsumowanie zadania.
nagłówek zadania jest prostym nagłówkiem ROBOCOPY u góry.
Podsumowanie zadania pokazuje stan podsumowania wszystkich plików/folderów, ilość przesłanych danych i czas zakończenia biegu.
każdy z tych elementów można ukryć za pomocą opcji /NJH
, aby ukryć nagłówek zadania oraz opcji /NJS
, aby ukryć Podsumowanie zadania. Możesz dołączyć jedną z tych opcji lub obie z nich razem.
przekierowanie dziennika wyjściowego do pliku
jeśli chcesz zapisać dziennik wyjściowy, Możesz przekierować go do pliku tekstowego i/lub wyświetlić na konsoli. Możesz to zrobić za pomocą tradycyjnych przekierowań wyjściowych, takich jak >
, >>
, PowerShell lub opcja /LOG
.
aby przekierować dziennik wyjściowy do pliku za pomocą opcji /LOG
nadpisanie istniejącego pliku dziennika użyj składni /LOG:<filepath>
, jak poniżej. Jedyne wyjście, które otrzymasz na konsoli, to ścieżka do pliku dziennika.
> robocopy C:\src C:\dst /LOG:c:\file.log Log File : c:\file.log
jeśli chcesz zachować zawartość dowolnego istniejącego pliku dziennika i dołączyć wyniki do pliku, możesz użyć operatora +
, jak pokazano poniżej.
> robocopy C:\src C:\dst /LOG+:c:\file.log Log File : c:\file.log
przekierowanie dziennika wyjściowego do pliku i wyświetlenie na konsoli
jeśli chcesz zapisać dziennik wyjściowy do pliku, ale także zobaczyć go na konsoli, możesz użyć opcji /TEE
. Opcja ta powoduje, że robocopy zapisuje dane wyjściowe do pliku dziennika, zachowując jednocześnie domyślne zachowanie zwracania danych wyjściowych do konsoli.
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE
kody zakończenia
podobnie jak wszystkie inne narzędzia wiersza poleceń, robocopy zwraca kody zakończenia w zależności od wyników wykonania. Wszyscy chcemy, aby robocopy zawsze kończył pomyślnie z 0
, ale nie zawsze tak się dzieje.
Poniżej znajdziesz cały kod wyjścia zwracany przez robocopy oraz ich Wyjaśnienie. Każdy kod wyjścia większy niż siedem wskazuje na co najmniej jedną awarię podczas wykonywania.
kod wyjścia | Wyjaśnienie |
0 | nie wykonano żadnej czynności. Źródło i miejsce docelowe są zsynchronizowane. |
1 | przynajmniej jeden plik został pomyślnie skopiowany. |
2 | wykryto dodatkowe pliki lub katalogi. Sprawdź dziennik. |
3 | kody wyjścia 2 i 1 łącznie. |
4 | znaleziono niedopasowane pliki lub katalogi. Sprawdź dziennik. |
5 | kody wyjścia 4 i 1 łącznie. |
6 | kody wyjścia 4 i 2 łącznie. |
7 | kody wyjścia 4, 1 i 2 łącznie. |
8 | nie można skopiować przynajmniej jednego pliku lub katalogu. Przekroczono limit ponownej próby. Sprawdź dziennik. |
16 | Kopia nie powiodła się katastrofalnie. |
zauważ, że jeśli uruchamiasz robocopy w narzędziu innej firmy, może to oznaczać, że każdy niezerowy kod zakończenia jest błędem. Aby temu zapobiec, możesz zmienić kod zakończenia na 0, jeśli zwróci 1.
kod wyjścia pliku Robocopy „extra” jest wspólnym kodem zwrotnym, co oznacza, że „dodatkowy” plik znajduje się w folderze docelowym, ale nie w folderze źródłowym. Kod ten wyklucza dodatki, które zapobiegną usunięciu z miejsca przeznaczenia.
zmiana kodu zakończenia w pliku wsadowym
jeśli uruchamiasz robocopy z plikiem wsadowym, możesz znaleźć wartość zmiennej %ERRORLEVEL%
. Jeśli zwróci 1, Użyj słowa kluczowego exit
, aby zakończyć skrypt z 0.
> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0
zmiana kodu zakończenia w skrypcie PowerShell
jeśli wykonujesz robocopy w skrypcie PowerShell, możesz wywołać robocopy za pomocą Start-Process
używając PassThru
, aby zwrócić utworzony proces i Wait
, aby poczekać na zakończenie robocopy. Następnie możesz sprawdzić właściwość ExitCode
pod kątem wartości 1. Jeśli kod zakończenia to 1, to zamknij skrypt PowerShell z 0 używając $host.SetShouldExit()
.
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCodeif ($exitCode -eq 1) { $host.SetShouldExit(0)}
typowe błędy
jeśli masz do czynienia z tysiącami plików, na pewno napotkasz pewne problemy. Oto zestawienie typowych błędów, na które natknąłem się
Błąd Nieprawidłowy parametr
kiedy widzisz błąd stwierdzający nieprawidłowy parametr błędu, zwykle oznacza to, że próbowałeś przekazać opcje do robocopy w jakiś sposób. Błąd nieprawidłowego parametru 3 robocopy jest najczęstszym, jak się wydaje.
częstym powodem wystąpienia tego błędu jest podanie katalogu źródłowego lub docelowego ze spacjami i pominięcie otaczania go cudzysłowami.
przykłady Robocopy
możesz zbudować własne ciągi robocopy lub możesz wziąć to, czego nauczyli się inni i używać ich! W tej sekcji omówię przypadki użycia robocopy do realizacji różnych zadań.
Znajdź rozmiar katalogu folderu sieciowego
: northendtrooper (Reddit)
> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64
szybko usuń zawartość folderu (ignorując uprawnienia do podfolderów)
Współpracownik: pizzasteveo (Reddit)
> robocopy c:\dummy c:\foldertodelete /MIR
Przeprowadzanie migracji dużych plików
Współpracownik: @ MySnozzberries (Twitter)
celem tego fragmentu jest wymuszenie własności wszystkich plików z powrotem na administratorów. Następnie dodajemy jawny ACE dla grupy Administrators dla pełnej kontroli nad każdym obiektem rekurencyjnie, mimo że ustawiamy również dziedziczenie.
Na koniec wykonujemy pełną kopię robocopy z Daclami do miejsca docelowego z logiem. Dziennik może być następnie sprawdzany pod kątem dodatkowych problemów z uprawnieniami lub po prostu blokad plików, a kolejna synchronizacja delta może być wykonana później.
> 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
rekurencyjnie wymusza grupę administratorów jako właściciela wszystkich plików i katalogów. Mogą być sposoby na obejście tego, ale jest to najbardziej ciężkie podejście ręczne i zwykle najszybsze.
> takeown /F .\test /R /A /D Y
kiedy już jesteśmy właścicielami, możemy teraz wymusić nowy asa do DACL dla każdego obiektu. Daje to administratorom pełną kontrolę przy włączonym dziedziczeniu i rekurencyjnym przechodzeniu przez ścieżkę.
ustawienie go w katalogu głównym z dziedziczeniem obejmowałoby środowisko, ale gdy udział ma właściciela twórcy z pełną kontrolą (co niestety jest nawet rekomendacją Microsoftu dla rzeczy takich jak przechowywanie profilu użytkownika plików), użytkownik może wyłączyć dziedziczenie lub usunąć Asy według własnego uznania. Tak więc ciężka ręka jest zwykle najszybszym rozwiązaniem.
> icacls .\test /grant "Administrators":(OI)(CI)F /T
po zmianie DACL na większości plików staramy się skopiować pliki do nowej lokalizacji, wspólnej dla takich rzeczy jak migracje udostępniania plików. W tym celu kopiujemy elementy rekurencyjnie i używamy przełącznika /SEC
, aby również skopiować dane / atrybuty/znaczniki czasu / znaki diakrytyczne.
następnie logujemy operację z pełnymi ścieżkami i dla wszystkich obiektów (/V
verbose switch) do dziennika, dzięki czemu możemy naprawić <5% błędów, które są zwykle związane z długością ścieżki lub blokadą pliku i uzyskać bardziej szczegółowe informacje.
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
jest to prosty framework do zarządzania migracją udziału plików przy minimalnym wpływie na doświadczenie użytkownika. Poprawia również kontrolę nad danymi. Jeśli Klient ma silną praktykę zarządzania danymi, w której własność jest właściwie zarządzana na poziomie folderu podrzędnego, staje się to bardziej skomplikowaną dyskusją, ale większość klientów, które uważamy za szczęśliwe, korzysta tylko z dziedziczenia i asów grupowych, więc jest to najczęstsza sytuacja i poprawka, od której zaczynamy.
alternatywy Robocopy
Robocopy jest niesamowitym narzędziem, ale istnieje wiele innych podobnych do niego narzędzi, które mogą Cię zainteresować.
- xxcopy – podobne narzędzie wiersza poleceń z mnóstwem opcji.
- Kopiuj – element PowerShell cmdlet-nie tak polecany, ale znacznie prostszy.
- TreeSize-GUI i narzędzie do wyszukiwania informacji o folderze.
podsumowanie
Robocopy jest doskonałym narzędziem do kopiowania dużych zbiorów plików. Niezależnie od tego, czy wykonujesz migrację danych, synchronizujesz foldery, czy po prostu potrzebujesz szybkiego sposobu na dokładne kopiowanie plików, robocopy jest doskonałym wyborem.