Adam Automator

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ą.

Domyślne opcje robocopy
Domyślne opcje robocopy

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ś.

używając / L
używając /L

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.

filtrowanie plików wyjściowych
filtrowanie plików wyjściowych

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.

Robocopy informuje o której godzinie rozpocznie się, jeśli zaplanowano
Robocopy informuje o której godzinie rozpocznie się, jeśli zaplanowano

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.

Robocopy job header
Robocopy job header

Podsumowanie zadania pokazuje stan podsumowania wszystkich plików/folderów, ilość przesłanych danych i czas zakończenia biegu.

Robocopy job summary
Robocopy job summary

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.

ukrywanie nagłówka i podsumowania zadania
ukrywanie nagłówka i podsumowania zadania

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.