Skip to content


Ile można wycisnąć z polecenia XCOPY?

[singlepic id=21 w=100 h=100 float=left]Wiele osób szuka różnych narzędzi do wykonywania kopii zapasowych, czy też synchronizacji danych i bardzo dobrze – bo każde poszukiwanie powiększa nasz bagaż wiedzy. W poniższym tekście nie chcę ich od tego odwieść, a jedynie przypomnieć o prostym poleceniu XCOPY – jak już się znudzą poszukiwania 🙂

Odpowiadając na tytułowe pytanie – Ci co na co dzień tworzą skrypty wiedzą, że naprawdę wiele.
Przyznam się, że kiedyś nie doceniałem tego polecenia i być może dlatego, że wydawało mi się zbyt proste. Jednak to właśnie one najmniej nas zawodzą, a proste rozwiązania są najlepsze 🙂

O samy poleceniu XCOPY możemy przeczytać uruchamiając tryb „wiersz polecenia” i wpisując xcopy /?. W praktyce, polecenie możemy uzbroić w konkretne przełączniki i zazwyczaj tworzymy plik wsadowy (np. kopia.bat).

W tym prostym poniższym przykładzie kopiowany jest profil użytkownika na np. zmapowany dysk sieciowy lub na Pendrive z literką K w systemie.

@echo off
set zrodlo=”%USERPROFILE%”
set cel=”k:\_kopia_zapasowa_”
set conf=/D /S /V /C /I /H /R /Y /Z /EXCLUDE:kopia.txt
xcopy %zrodlo% %cel% %conf%

Jak widać mamy źródło, cel i conf – przełączniki, w których znajduje się między innymi /EXCLUDE: i odwołanie do pliku kopia.txt. Plik ten tworzymy w tej samej lokalizacji co kopia.bat i zawiera informacje jakich danych nie chcemy kopiować np.:

.bak
.tmp
.temp
~h
Desktop.ini
Thumbs.db
\IECompatCache\
\IETldCache\
\Temp\
\Temporary Internet Files\

Jeżeli wykonujemy sukcesywnie tylko kopię danych to pomocny jest parametr /D, który zaoszczędzi nam trochę czasu, gdyż nie będą kopiowane pliki których data się nie zmieniła na nowszą.

Przełączniki oczywiście dowolnie dobieramy wg uznania i potrzeby.

W przykładzie wykorzystane są:
/D:m-d-r Kopiuje pliki zmienione określonego dnia lub później. Jeśli nie podano daty, kopiuje tylko pliki, dla których czas wersji źródłowej jest późniejszy niż czas wersji docelowej.
/EXCLUDE:plik1[+plik2][+plik3]… Określa listę plików zawierających ciągi. Każdy ciąg powinien być w osobnym wierszu w plikach. Jeżeli jakiś ciąg pasuje do dowolnej części ścieżki absolutnej kopiowanego pliku, plik ten nie zostanie skopiowany. Na przykład, określenie ciągu postaci \obj\ lub .obj spowoduje wyłączenie wszystkich plików w podkatalogu obj lub wszystkich plików z rozszerzeniem .obj.
/S Kopiuje katalogi i podkatalogi, z wyjątkiem pustych.
/V Weryfikuje każdy nowy plik.
/C Kontynuuje kopiowanie nawet po wystąpieniu błędu.
/I Jeśli „cel” nie istnieje i kopiowany jest więcej niż jeden plik, zakłada, że „cel” musi być katalogiem.
/R Zastępuje pliki tylko do odczytu.
/Y Wyłącza monitowanie o potwierdzenie zastąpienia istniejącego pliku docelowego.
/Z Kopiuje pliki w trybie umożliwiającym ponowne uruchomienie.

Cóż, XCOPY jest prostym poleceniem i niedoskonałym w niektórych przypadkach, ale z powodzeniem możemy stosować je w wielu, nawet zaawansowanych skryptach. Należy jednak wiedzieć, że xcopy nie radzi sobie między innymi z plikami o nazwie dłuższej niż 256 znaków.

Można na koniec rzec, że podobnym narzędziem jak xcopy jest dużo sprawniejszy jego brat robocopy, ale to jak zwykle temat kolejnego artykułu.

Kategoria: Wszystkie wpisy.

Tag: , , .


komentarze 2

RSS dla komentarzy do tego wpisu.

  1. Witold Patan says

    Kopii nigdy nie za dużo.. choć warto je jakoś oznaczać np. poprzez log z datą.
    Zachęcam do zapoznania się i korzystania z dużo bardziej zaawansowanego narzędzia ROBOCOPY, który jest częścią nowych windowsów. Bez niego to już nie ta sama synchronizacja.. 🙂
    Pozdrawiam

    P.S.
    Najprostsza konfiguracja (miroring):

    @echo off
    set zrodlo="%USERPROFILE%"
    set cel="\\Serwer\Backup\%Username%_%COMPUTERNAME%"
    if not exist %cel% mkdir %cel%
    set log=%cel%\%date%_log.txt
    set folder=Temp AppData "3D Objects" "Tracing" "Dane aplikacji" "Ustawienia lokalne" "Temporary Internet Files" NetHood SendTo Szablony UserData
    set files=*USER.DAT* *.wab~ *.bak *.wbk ~h*.* ~*.* *.tmp *.temp *.swp backup*.* *usuni*te.dbx desktop.ini Thumbs.db Default.rdp *rzyk*adow*.lnk NTUSER.DAT ntuser.ini ntuser.dat.LOG ntuser.pol Sti_Trace.log sqlprov.log
    set conf=/MIR /TEE /S /V /NP /R:0 /W:0 /A-:RAHTN /XF %files% /XD %folder% /LOG+:%log%
    robocopy %zrodlo% %cel% %conf%

  2. kpodstawa says

    Na podstawie tego artykułu zrobiłem plik wsadowy dla okresowego kopiowania plików z dysku lokalnego do magazynu sieciowego. Działa dobrze, np. kopiuje tylko zmienione zasoby.
    Foldery i pliki na dysku fizycznym są synchronizowane w zakładowej chmurze. Serwer plików z pełną kopią zapasową w oddziałowej sieci lokalnej dla mnie nie jest nadmiarową fanaberią.
    Krzysztof



Some HTML is OK

or, reply to this post via trackback.



statystyka