Robocopy nie kopiuje folderu głównego i jego sygnatury czasowej - kopiuje wszystkie podkatalogi i pliki (po ustawieniu odpowiednich opcji) i wydaje się, że nie ma opcji / argumentu, który by powiedziałby Robocopy, że chcesz samego folderu głównego oraz jego znacznika czasu lub atrybutów do skopiowania również dosłownie.
Powiedzmy, że chcę skopiować C: / Brushes
Robocopy skopiuje wszystkie swoje podkatalogi i pliki do miejsca docelowego, ale nie sam folder Brushes, ze wszystkimi powiązanymi atrybutami i znacznikiem czasu.
Rozumiesz o co pytam? Jest to dość podstawowe i Robocopy wydaje się nie mieć na to opcji. Ludzie zadawali to pytanie na różnych forach, ale o ile mi wiadomo, nikt nie odpowiedział na to pytanie.
rsync
, ale co, jeśli nie masz końcowego ukośnika na końcu folderu docelowego? Co powiesz na próbę zmodyfikowania skryptu na poziomie wiersza poleceń zamiast korzystania z GUI? Wiem na pewno, że narzędzie wiersza polecenia zrobi to, czego potrzebujesz.Odpowiedzi:
Upuść folder na
bat
lub użyj w Wyślij do . Utworzy folder z nazwą i znacznikiem czasu katalogu źródłowego i skopiuje wszystkie pliki.źródło
%~n1
?Zgadzam się z OP, że niemożność skopiowania folderu głównego jest dużą wadą robocopy. Co powiesz na oszukiwanie i przenoszenie folderu pędzli do folderu tymczasowego, wykonanie operacji robocopy na folderze tymczasowym, a następnie przeniesienie go z powrotem?
Coś jak:
źródło
Spróbuj
md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes
z wiersza polecenia, zastępując prawidłowe ścieżki.źródło
Jak nie widzę żadnego dobrego i łatwego rozwiązania w żadnej z odpowiedzi:
Jeśli nie ma rozwiązania dla robocopy, możesz rzucić okiem na xxcopy (istnieją wersje darmowe i komercyjne).
Istnieje oczywiście wiele innych alternatyw dla robocopy, niektóre są wymienione tutaj .
Zobacz także Najlepsze bezpłatne narzędzie do kopiowania plików .
źródło
xxcopy
jest doskonałym narzędziem, ale wersja bezpłatna zawiera monit, na który musisz odpowiedzieć, jeśli używasz dużej listy przełączników wiersza poleceń.xxcopy
Ten dodatkowy monit przy użyciu okna poleceń jest irytujący. Ale w ogóle zapobiega (komplikuje) korzystaniexxcopy
z pliku wsadowego.odpowiedź user105198 jest w połowie drogi,
D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes
stworzy po prostu nowy folder. Trzeba będzie dopisywania / MIR i / DCOPY: T do niegopołączone razem oznaczają: atrybuty katalogu źródłowego i znaczniki czasu zostaną dublowane w utworzonym folderze.
więc:
źródło
Myślę, że przekonasz się, że Robocopy robi dokładnie to, co chcesz, pod warunkiem, że powiesz mu, aby skopiował znaczniki czasu folderów (/ DCOPY: T). Z moich eksperymentów wynika, że następujące (pozornie nieudokumentowane) zachowanie jest prawdziwe dla Robocopy:
Określone właściwości mogą obejmować (przynajmniej) informacje o bezpieczeństwie (/ SEC) lub znaczniki czasu folderu (/ DCOPY: T).
Dlatego w poniższym przykładzie do folderu c: \ destination \ folder zostaną przypisane te same znaczniki czasu co folder c: \ source \ folder.
Przetestowałem to z wersjami Robocopy zawartymi w systemie Windows 7, Windows 8 i Windows 2003 Resource Kit (tylko parametr / SEC). Zauważ, że tylko nowsze wersje Robocopy (XP026 i nowsze) obsługują parametr / DCOPY: T.
źródło
Jeśli połączysz się
/IF :: Include the following Files.
z nią/E :: copy subdirectories, including Empty ones.
, uzyskasz (blisko) pożądany efekt:źródło
Robocopy nie jest tak zaprojektowane, aby to zrobić łatwo. Istnieje jednak sposób.
Folder główny zawiera, powiedzmy, 50 plików i 40 folderów. Potrzebujesz tylko folderu X (ale chcesz też, aby był to znacznik czasu i daty).
Opcja / DCOPY: T nakazuje zachowanie znaczników czasu folderu. / XF określa, które pliki NIE mają być kopiowane, / XD określa, które foldery NIE mają być kopiowane. Po prostu nie określaj folderu c: \ X.
Główną wadą tego jest wyszukiwanie wszystkich folderów i nazw plików w katalogu głównym, a konkretnie wywoływanie ich wszystkich tutaj. Jeśli robisz to dużo na różnych systemach, skrypt może zostać napisany.
Przykład roboczy
robocopy c: \ testowanie c: \ abc / XF c: \ testowanie \ Testowanie.txt / XD "C: \ testowanie \ Nowy folder (2)" "C: \ testowanie \ Nowy folder (3)" / S / E / SEC / DCOPY: T
Przykład działania rootowania
robocopy c: \ d: \ / XF c: \ Testing.txt / XD "C: \ Nowy folder (2)" "C: \ Nowy folder (3)" / S / E / SEC / DCOPY: T
Mój test zadziałał, tworzę kilka folderów i podfolderów, c: \ testowanie w tym przypadku było rootem, c: \ abc było rootem innego dysku (oczywiście tak nie jest, ale w tym celu powinno to mieć sens). Folder, który chciałem z katalogu głównego, nazywał się „Nowy folder”, jak widać, nie określiłem go w katalogu / XD. Upewnij się również, że podałeś c: \, ponieważ używane nazwy będą globalne. Innymi słowy, jeśli nie określiłem c: \ testowanie z pliku Testing.txt, pomijałby to WSZYSTKIE kopiowane podfoldery. / SEC skopiuje wszystkie zabezpieczenia plików i znaczniki czasu.
źródło
Teoretycznie używanie
/DCOPY:T
powinno rozwiązać wszystkie problemy.Ale widziałem, że tak się dzieje i nie jestem pewien, czy nazwałbym to „błędem”, ale raczej konsekwencją sekwencji operacji (OK, błąd).
To polecenie powinno działać, aby skopiować wszystkie pliki z
C:\Brushes
doD:\NEWBrushes
i/DCOPY:T
powinno spowodować skopiowanie znaczników czasu folderu źródłowego do folderu docelowego:Widziałem (przynajmniej w niektórych wersjach Robocopy), że polecenie się powiodło, ale znacznik czasu
D:\NEWBrushes
folderu jest ustawiony na bieżącą datę i godzinę.Wygląda więc na to, że
/DCOPY:T
funkcja nie działa dla kopiowanego folderu „podstawowego” (najwyższego).Uważam, że działa, ale znacznik czasu folderu docelowego jest „przyspieszany” przez operacje, które są później w sekwencji operacji.
Wydaje mi się, że dzieje się to dla tego polecenia:
jest coś takiego:
D:\NEWBrushes
jeśli jeszcze nie istniejeC:\Brushes
doD:\NEWBrushes
C:\Brushes
doD:\NEWBrushes
Wygląda na to, że krok 3, zmiana zawartości folderu
D:\NEWBrushes
powoduje zmianę znacznika czasuD:\NEWBrushes
.Dla mnie „obejściem” było uruchomienie
robocopy
polecenia skopiowania plików i folderów, a następnie ponowne uruchomienie (tego samego)robocopy
polecenia.Więc przy pierwszym uruchomieniu:
wszystkie pliki i foldery zostaną skopiowane. Następnie uruchom go ponownie:
Przy drugim
robocopy
uruchomieniu żadne pliki ani folderyD:\NEWBrushes
nie zostaną zmodyfikowane, a/DCOPY:T
opcja poinformujerobocopy
o skopiowaniu znacznika czasu zC:\Brushes
doD:\NEWBrushes
(chyba że istnieją foldery / plikiC:\Brushes
, które zmieniły się od pierwszego uruchomieniarobocopy
).źródło
Rozwiązałem teraz foldery główne dla jednego naprawdę szybkiego i łatwego skryptu tworzenia kopii zapasowych za pomocą robocopy, jest przykład. Powinien pomóc każdemu:
źródło