Plik wsadowy do kopiowania plików z jednego folderu do innego folderu

235

Mam folder przechowywania w sieci, w którym wszyscy użytkownicy będą przechowywać swoje aktywne dane na serwerze. Teraz serwer zostanie zastąpiony nowym z powodu problemu z miejscem, więc muszę skopiować pliki podfolderów ze starego folderu pamięci serwera do nowego folderu pamięci serwera. Mam poniżej ex:

z \ Oldeserver \ storage \ data & files do \ New server \ storage \ data & files.

użytkownik73628
źródło
3
Zakładam, że mówisz o środowisku Windows?
Alan Plum
2
Pliki wsadowe
Hugo M. Zuleta,
4
@ HugoM.Zuleta, znam pliki .bat. Ale „plik wsadowy” niekoniecznie gwarantuje środowisko Windows. Użycie terminu wcześniej niż Windows (podobnie jak pliki .bat), a nawet widziałem, jak nowicjusze używają tego terminu w znaczeniu „skryptów powłoki” w środowiskach * nix.
Alan Plum
1
@pluma Zgadzam się, a to głównie dlatego, że odnoszą się do operacji wsadowych wykonywanych przez narzędzia skryptowe ich systemu operacyjnego.
Hugo M. Zuleta

Odpowiedzi:

441

xcopy.exe jest tu na pewno twoim przyjacielem. Jest wbudowany w Windows, więc jego koszt jest niczym.

Właśnie xcopy /s c:\source d:\target

Prawdopodobnie chciałbyś ulepszyć kilka rzeczy; niektóre z dodanych przez nas opcji obejmują również:

  • /s/e - kopiowanie rekurencyjne, w tym kopiowanie pustych katalogów.
  • /v- dodaj to, aby zweryfikować kopię względem oryginału. wolniej, ale dla paranoików.
  • /h - skopiuj system i ukryte pliki.
  • /k- kopiuj atrybuty tylko do odczytu wraz z plikami. w przeciwnym razie wszystkie pliki stają się do odczytu i zapisu.
  • /x- jeśli zależy Ci na uprawnieniach, możesz chcieć /olub /x.
  • /y - nie pytaj przed zastąpieniem istniejących plików.
  • /z- jeśli uważasz, że kopia może się nie powieść i chcesz ją ponownie uruchomić, użyj tego. Umieszcza znacznik na każdym pliku podczas kopiowania, dzięki czemu można ponownie uruchomić polecenie xcopy, aby rozpocząć od miejsca, w którym zostało przerwane.

Jeśli uważasz, że xcopy może się częściowo nie powieść (na przykład podczas kopiowania przez niestabilne połączenie sieciowe) lub że musisz go zatrzymać i chcesz kontynuować później, możesz użyć xcopy /s/z c:\source d:\target.

Mam nadzieję że to pomoże.

lavinio
źródło
2
@Iavinio Pyta o plik lub katalog podczas kopiowania archiwum. Czy istnieje sposób, aby to ukryć?
Bitterblue,
Cześć @ mini-me - Odkryłem, że jeśli jest to katalog, możesz podać znak końcowy „/” i nie zobaczysz tej wiadomości.
DaveDev
2
/i- Jeśli miejsce docelowe nie istnieje i kopiowanie więcej niż jednego pliku, zakłada, że ​​miejsce docelowe musi być katalogiem.
lavinio
1
Jak skopiować pojedynczy plik z katalogu?
Charan Raju CR
10
Aby obejść monit „plik lub katalog”, wykonaj polecenie w ten sposób ... echo f | xcopy /s /f srcfile destfile
wintondeshong,
56

Mój ulubiony do tworzenia kopii zapasowych danych to:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir jest dla lustra. Możesz także użyć / mov do przenoszenia plików. Odtwarza dokładnie ten sam folder. Może usuwać / zastępować pliki w razie potrzeby. Działa świetnie dla mnie.Jest szybszy niż xcopy / copy. Jest również wbudowany w Windows.

Źródło: http://technet.microsoft.com/en-us/library/cc733145.aspx

Etienne Dupuis
źródło
2
Popieram to. To jest naprawdę szybkie. znacznie szybciej niż xcopy
Ike
Czy istnieje sposób rekurencyjnego usuwania thumbs.db podobny do tego?
drooh
54

Żeby było jasne, kiedy używasz xcopy /s c:\source d:\target, umieść „” wokół c: \ source id: \ target, w przeciwnym razie pojawi się błąd.

tzn. jeśli na ścieżce są spacje, tj. jeśli masz:

"C:\Some Folder\*.txt"

ale nie wymagane, jeśli masz:

C:\SomeFolder\*.txt
Ike
źródło
1
Znaki cudzysłowu załatwiły sprawę;) dzięki również użyłem / Y do zastąpienia pliku, jeśli istnieje :) Przykład: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro,
18

Możesz rzucić okiem na XCopy lub RoboCopy, które są dość kompleksowymi rozwiązaniami dla prawie wszystkich operacji kopiowania plików w systemie Windows.

Joey
źródło
3
RoboCopy wydaje się być lepszy niż XCopy, ponieważ xcopy prosi o decyzje dotyczące plików lub folderów. I nie mogę tego odrzucić. MUSI być w stanie pracować w pełni automatycznie.
Bitterblue,
@ mini-me Wiem, że jest już bardzo późno, jednak nie mogę znaleźć tego samego odpowiedniego przełącznika. Skończyło się na tym, że utworzyłem pusty plik o tej samej nazwie, na którą kopiuję, a następnie nadpisuję go. Jeśli plik już istnieje, to nie przeszkadza, pytając, czy jest to plik czy katalog. (Jeśli chcesz auto katalog, możesz dodać „/” do ścieżki i to zrobi). Mam nadzieję, że to pomoże przyszłym ludziom!
Tom C
2
@Eve Dla odniesienia echo f | xcopy source destination /ysprawi, że będzie to automatyczne. Przypisuje wszystkie pytania jako „f” jako odpowiedź. Przekaże również żądania zastąpienia (myślę, że f jest uważane za tak).
ndm13,
14

Aby ominąć „podaj nazwę pliku lub nazwę katalogu docelowego (F = plik, D = katalog)?” monit za pomocą xcopy, możesz wykonać następujące czynności ...

echo f | xcopy /f /y srcfile destfile

lub dla tych z nas po prostu kopiujących duże struktury / foldery:

użyj / i, która określa miejsce docelowe, musi być katalogiem, jeśli kopiujesz więcej niż jeden plik

wintondeshong
źródło
(echo „f” dla plików lub „D” dla katalogów)
JinSnow,
próbuję to zrobić teraz i to po prostu nie działa - zawsze otrzymuję monity podczas próby skopiowania jednego pliku do innego katalogu. Używanie Win 10, jeśli to w ogóle wpływa na echo f | xcopy / f / y „My.dll” „C: \ myFolder \ My.dll”. Wypróbowałem to z kombinacją innych przełączników bezskutecznie (i dużych F)
Prof
3

jeśli chcesz skopiować plik bez ścieżki bezwzględnej, innymi słowy:

nie zapomnij napisać ukośnika odwrotnego na ścieżce ORAZ NIE ciąć

przykład:

    copy children-folder\file.something .\other-children-folder

PS: ścieżkę bezwzględną można pobrać za pomocą tych symboli wieloznacznych zwanych „parametrami partii”

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

sprawdź dokumentację tutaj na temat kopiowania: https://technet.microsoft.com/en-us/library/bb490886.aspx

a także tutaj dla dokumentacji parametrów partii: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

marcdahan
źródło
Myślę, że \ nazywa się odwrotnym ukośnikiem.
Leon Bohmann,
2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.
David Castro
źródło
0

Spójrz na rsyncoparte na systemie Windows narzędzie NASBackup . Będzie to bonus, jeśli znasz komendy rsync.

nik
źródło