Z pewnością każdy z nas potrzebował stworzyć szybką kopię zapasową naszych plików. Dzisiaj pokaże wam niezwykle prosty patent, na wykonanie kopii plików za pomocą polecenia robocopy.
Osobiście korzystam z tego polecenia od jakiegoś czasu i nigdy mnie nie zawiodło. Składnia robocopy jest dość banalna załóżmy, że chcemy wykonać backup zawartości folderu:
D:\Dokumenty
Do lokalizacji:
F:\Backup\Dokumenty
Podstawowa składnia polecenia wygląda zatem następująco:
robocopy "D:\Dokumenty" "F:\Backup\Dokumenty"
Jednak na niewiele się nam ona zda gdyż szybko okaże się, że w ten sposób kopiujemy jedynie pliki we wskazanym przez nas folderze, wszystkie podfoldery są pomijane. Aby uwzględnić foldery możemy użyć parametru /S a jeszcze lepiej /E który skopiuje również puste katalogi:
robocopy "D:\Dokumenty" "F:\Backup\Dokumenty" /E
Dam sobie rękę uciąć, że często coś zmieniacie w strukturze swoich dokumentów np. segregujecie swoje zdjęcia czy też muzykę przenosząc je pomiędzy folderami. Wypadałoby nakłonić robocopy, aby uwzględniał te zmiany i usuwał nieistniejące już foldery/pliki z naszej kopi zapasowej prawda ? Zatem zamiast parametru /E wykorzystamy parametr /MIR
robocopy "D:\Dokumenty" "F:\Backup\Dokumenty" /MIR
Teraz jeżeli korzystacie z linków symbolicznych o których już pisałem, i z jakiegoś powodu chcecie je pominąć w trakcie tworzenia kopii musicie do polecenia dodać parametr /XJD a jeżeli chcecie pominąć jeszcze pliki systemowe użyjcie parametru /XA:SH zatem nasza składnia zaczyna wyglądać następująco:
robocopy "D:\Dokumenty" "F:\Backup\Dokumenty" /MIR /XJD /XA:SH
Ale to jeszcze nie wszystko. Jednym z większych “bajerów” jakie posiada robocopy to jego reakcja na próbę skopiowania pliku, który aktualnie jest w użyciu. Standardowo natrafiając na taki plik wyświetla nam się taki komunikat:
Czyli bohater naszego artykułu poczeka sobie 30 sekund i ponowi próbę. Jeżeli nie uda mu się skopiować pliku po milionie prób (to nie jest żart…) plik zostanie pominięty. Musimy zatem nakłonić robocopy, aby po pierwsze zmniejszył czas pomiędzy próbami kopiowania parametrem /w:x oraz co jest bardziej oczywiste liczbę prób skopiowania pliku /r:x gdzie pod x podajemy czas w sekundach.
robocopy "D:\Dokumenty" "F:\Backup\Dokumenty" /MIR /XJD /XA:SH /R:5 /W:15
W moim przypadku skrypt będzie czekał 15 sekund a po piątej nieudanej próbie po prostu go pominie.
Mam nadzieję, że do tego czasu jeszcze niczego nie zagmatwałem, pozostał nam jeszcze jeden parametr który warto znać. Standardowo robocopy zajmuje się jednym plikiem jednocześnie co przy listowaniu katalogów potrafi mu zająć za dużo naszego czasu. Parametr /MT:x określa iloma operacjami robocopy zajmie się jednocześnie. W moim przypadku wystarcza mi 15 wątków zatem dodajemy kolejny parametr do naszego polecenia:
robocopy "D:\Dokumenty" "F:\Backup\Dokumenty" /MIR /XJD /XA:SH /R:5 /W:15 /MT:15
Dzięki czemu sprawimy, że cała operacja zajmie znacznie mniej czasu oczywiście tylko w przypadku, jeżeli zrobiliśmy już co najmniej jedną kopię zapasową za pomocą naszego skryptu.
Mam nadzieję, że dość jasno wytłumaczyłem wam jak korzystać z robocopy. Wyżej wymienione parametry to tylko wierzchołek góry lodowej, aby uzyskać dostęp do wszystkich parametrów wystarczy w wierszu poleceń wpisać
robocopy /?
a wyświetlą nam się wszystkie dostępne parametry m.in. pomijanie plików starszych niż x dni, większych od x bajtów itd. Skoro znacie już składnię tego polecenia z pewnością dostosujecie polecenie robocopy do swoich potrzeb.
Nie musicie za każdym razem wklepywać polecenia w wiersz poleceń. Po prostu zapiszcie je np. w notatniku z rozszerzeniem *.cmd np. backup.cmd i w chwili potrzeby po prostu uruchomcie je jako administrator.
Jak widzicie do wykonania nawet dość zaawansowanego backupu danych wcale nie potrzebujecie zewnętrznych aplikacji wystarczy odrobinę sprytu i dość podstawowa wiedza którą się właśnie z wami podzieliłem.
13 komentarzy
Uratowałeś mi życie od 3 dni siedziałem aby zrobić kopię dysku prawie 1TB, ciągle wywalało mi błąd kopiowania za długa nazwa Windows file paths longer than 255 characters podczas funkcji kopiowania windows, masa zmian w windows7 w rejestrze typu LongPathsEnabled and set it to 1, setki solucji w internecie aby rozwiązać ten problem niestety nic nie pomagało, nawet nadałem enable dla grupy windows Enable Win32 long paths aby nie zwracał błędu za długiej nazwy podczas kopiowania plików bez skutki, na postach zagranicznych przewijał się wątek robocopy aby zastosować komendę robocopy d:\*.* e:\*.* niestety nie działała u mnie wywalało błąd i tak trafiłem na Twoją stronę i to był strzał w 10-tkę, są programy do robienia kopii bezpieczeństwa ale 99% komercyjnie zastosowanie jest płatnych, teraz po Twojej solucji robię kopię bezpieczeństwa bez problemu i nawet wydaje mi się że szybciej kopiuje niż funkcją kopiowania w windows. Podziękowania teraz backup bezpieczeństwa jest przyjemny 🙂 zajmuje skopiowanie 1TB bo to masa drobnych plików po kilka kb, ale idzie bez problemu 🙂
Cieszę się, że mogłem pomóc.
Witam. Mam takie dwa skrypty uruchomione jednoczesnie:
1 robocopy “D:\Dysk lokalny\Raporty” “D:\Dysk sieciowy\Raporty PK” /IF *PK*.txt /E /FFT /MON:1
2 robocopy “D:\Dysk lokalny\Raporty” “D:\Dysk sieciowy\Raporty” /XF *PK*.txt /E /FFT /MON:1
Ma to na celu kopiowanie plikow z wykluczeniem. To wszystko działa w taki sposob, że tworzą się dwa katalogi na dysku sieciowym “Raporty i “Raporty PK” i do pierwszego kopiuje się wszystko co nie zawiera PK a do drugiego co zawiera PK. Czyli są dwie ścieżki. Teraz moje pytanie jest takie czy da się to zrobić w taki sposób żeby była jedna ścieżka , a katalog PK tworzył się wewnątrz folderu gdzie napotyka plik w nazwie z PK. Przykład D:\Dysk sieciowy\Raporty\Kwartał 1\Kwartał 2… i właśnie w tym miejscu jest plik zawierający w nazwie PK i tu tworzy się katalog i wrzuca wszystkie te pliki. Nie wiem czy za dużo nie namieszałem i rozumiecie o co mi chodzi ?
Pozdrawiam.
Czytam to już trzeci dzień, i dalej nie wiem o co chodzi 😉
Działa. Wielkie dzięki ?
Dzieki. A teraz mam taki problem, pliki maja nazwy np. Plik1 us.txt ; Plik2.txt; Plik3.txt. No i chce zeby skopiowal wszystkie a pominal te ktore w nazwie pliku beda mialy “us”. Czy jest w ogole taka możliwosc. Pozdrawiam. ?
Nie pamiętam jak dokładnie używa się wildcardów w winzgrozie ale byłoby to coś w stylu *us*.txt.
To będę czekał na informację. Dzięki ?
/xd “ścieżka_do_folderu” – w ten sposób robocopy “oleje” wskazany folder
/xf “ściezka do pliku” – w ten sposób olewamy określony plik.
Jutro może się trochę o tym rozpiszę, w chwili obecnej konfiguruję mój nowy sprzęt 🙂
Witam. A jest taka możliwość żeby podczas kopiowania zostały pominięte te pliki które w nazwie mają jakiś wyraz klucz dzięki któremu będziemy oznaczać pliki których nie chcemy kopiować?
Pozdrawiam.
W chwili obecnej nie mogę tego sprawdzić. Mój komputer po burzy poszedł w cholewę i dopiero za 2 dni zlożę sobie nowy. Ale prawdopodobnie da się, tylko z pamięci nie podpowiem.
Robocopy jest idealne do tworzenia mirrorów zawartości całych dysków – sam tego używam do szybkich backupów. Mógłby jeszcze kompresować zawartość kopii, no ale jak za darmo to i tak jest dobrze.
Przecież nic nie stoi na przeszkodzie, abyś wrzucił w skrypt polecenie kompresowania folderu (np. 7-zip’em)