Kopiowanie plików bez nadpisywania

Po prostu nie mogę znaleźć sposobu w linii poleceń, aby powiedzieć " skopiuj wszystkie pliki z katalogu a do katalogu b, ale jeśli plik już istnieje w katalogu B, nie nadpisuj go, bez względu na to, który plik jest nowszy, i nie pytaj mnie."

Przeszedłem przez copy, move, xcopy i robocopy, a najbliższe, jakie mogę uzyskać, to to, że możesz powiedzieć robocopy "Kopiuj A do B, ale nie nadpisuj nowszych plików starszymi plikami", ale to nie działa dla mnie. Patrzyłem na xxcopy, ale go odrzuciłem, ponieważ nie chcesz mieć zależności innej firmy od zdarzenia post-build Visual Studio, które będzie wymagało od innych użytkowników SVN zainstalowania tego narzędzia w celu wykonania kompilacji.

Chcę dodać wiersz poleceń do zdarzenia post-build w Visual Studio 2010, aby pliki wygenerowane z szablonów T4 dla nowych obiektów modelu EF były dystrybuowane do folderów projektu, do których należą, ale zregenerowane pliki dla istniejących obiektów nie nadpisują potencjalnie edytowanych obiektów pliki docelowe.

Ponieważ szablon T4 regeneruje się, plik źródłowy jest zawsze nowszy i nie mogę niezawodnie użyć przełącznika "nowszy", nie sądzę.

Używam klas częściowych dla tych elementów, dla których mogę, ale są inne rzeczy, które generuję, które nie mogą używać klas częściowych (np. generowanie domyślnego EditorTemplate lub DisplayTemplate *.plik ascx).

Ktoś ma jakieś podobne problemy, które rozwiązali?

Author: Peter Mortensen, 0000-00-00

12 answers

For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"
 31
Author: Stu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-01 19:43:49

Robocopy, lub "Robust File Copy", jest poleceniem replikacji katalogów wiersza poleceń. Jest on dostępny jako część Windows Resource Kit począwszy od Windows NT 4.0 i został wprowadzony jako standardowa funkcja Windows Vista, Windows 7 i Windows Server 2008.

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

Aby wyjaśnić (używając odpowiedzi Hydrargyrum, HailGallaxar i Andy Schmidt):

  • /E sprawia, że Robocopy kopiuje rekurencyjnie podkatalogi, łącznie z pustymi.
  • /XC wyklucza istniejące pliki z ten sam znacznik czasu, ale inny rozmiary plików. Robocopy Zwykle nadpisuje je.
  • /XN wyklucza istniejące pliki niż kopia w miejscu przeznaczenia katalog. Robocopy normalnie nadpisuje je.
  • /XO istniejące pliki starsze niż kopia w miejscu przeznaczenia katalog. Robocopy normalnie nadpisuje je.

Po wykluczeniu zmienionych, starszych i nowszych klas Robocopy robi dokładnie to, co original poster chce - bez potrzeby ładowania środowiska skryptowego.

Referencje: Technet, Wikipedia
Pobierz z: Microsoft Download Link (Link ostatnio zweryfikowany w Mar 30, 2016)

 163
Author: Dr. belisarius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 21:39:05

Rozwiązanie Belisariusa jest dobre.

Aby rozwinąć tę lekko zwięzłą odpowiedź:

  • /E sprawia, że Robocopy kopiuje rekurencyjnie podkatalogi, łącznie z pustymi.
  • /XC wyklucza istniejące pliki z ten sam znacznik czasu, ale inny rozmiary plików. Robocopy Zwykle nadpisuje je.
  • /XN wyklucza istniejące pliki niż kopia w źródle katalog. Robocopy normalnie nadpisuje je.
  • /XO istniejące pliki starsze niż Kopia w źródle katalog. Robocopy normalnie nadpisuje je.

Z wykluczeniem zmienionych, starszych i nowszych klas, Robocopy robi dokładnie to, czego chce oryginalny plakat - bez potrzeby ładowania środowiska skryptowego.

 42
Author: Hydrargyrum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-11 08:19:12

Możesz spróbować tego:

echo n | copy /-y <SOURCE> <DESTINATION>

-y po prostu monity przed nadpisaniem i możemy wysłać n do wszystkich tych pytań. Więc to w istocie po prostu skopiować nieistniejące pliki. :)

 35
Author: sachin11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 02:23:49

Tutaj jest w formie pliku wsadowego:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"
 5
Author: Gabe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 21:12:53

Jest dziwny sposób, aby to zrobić z xcopy:

echo nnnnnnnnnnn | xcopy /-y source target

Po prostu dołącz tyle n plików, ile kopiujesz, a to odpowie n na wszystkie pytania o nadpisanie.

 3
Author: Adam Ruth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 19:35:01

Chcę tylko wyjaśnić coś z moich własnych testów.

@ Hydrargyrum napisał (a):

  • / XN wyklucza istniejące pliki nowsze niż kopia w katalogu źródłowym. Robocopy Zwykle nadpisuje je.
  • / XO wyklucza istniejące pliki starsze niż kopia w katalogu źródłowym. Robocopy Zwykle nadpisuje je.

To jest rzeczywiście odwrotnie. XN nie "wyklucza nowszych" plików, ale wyklucza pliki, które są nowsze niż kopia w miejscu docelowym katalog. XO "wyklucza starsze", ale wyklucza pliki starsze niż kopia w katalogu .

Oczywiście zrób własne testy jak zawsze.

 2
Author: HailGallaxar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-16 13:07:03
robocopy src dst /MIR /XX

/XX: wyklucza" dodatkowe " pliki i dirs (obecne w miejscu docelowym, ale nie źródłowe). Zapobiegnie to usunięciom z miejsca docelowego. (to jest domyślne)

 2
Author: be_good_do_good,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-12 16:13:00

Robocopy można pobrać tutaj dla systemów, w których nie jest jeszcze zainstalowany. (Tj. Windows Server 2003.)

Http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (nie wymaga restartu do instalacji)

Pamiętaj, aby ustawić ścieżkę do robocopy exe. Możesz to zrobić klikając prawym przyciskiem myszy "Mój komputer" > Właściwości>Zaawansowane> "Zmienne środowiskowe", następnie znajdź zmienną systemową path i dodaj ją na koniec:"; C:\Program Files\Windows Resource Zestawy\narzędzia " lub gdziekolwiek go zainstalowałeś. Upewnij się, że pozostawisz już istniejące ciągi zmiennych path i po prostu dopisz ścieżkę dodaną.

Po ustawieniu ścieżki można uruchomić polecenie, które sugeruje belisarius. Działa świetnie.

 1
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-09 15:37:46

Nie pozwala mi to bezpośrednio komentować nieprawidłowych wiadomości - ale ostrzegam wszystkich, że definicja opcji / XN i / XO jest odwrócona w porównaniu do tego, co zostało zamieszczone w poprzednich wiadomościach.

Opcja Wyklucz starsze / nowsze pliki jest zgodna z informacjami wyświetlanymi w logowaniu RoboCopy: RoboCopy będzie powtarzał w źródle, a następnie raportuje, czy każdy plik w źródle jest "starszy" czy "nowszy" niż plik w źródle miejsce.

W związku z tym, /XO wyłączy starsze pliki źródłowe (co jest intuicyjne), a nie "starsze niż Źródło", jak zostało to tutaj stwierdzone.

Jeśli chcesz kopiować tylko nowe lub zmienione pliki źródłowe, ale unikaj zastępowania nowszych plików docelowych, to / XO jest właściwą opcją do użycia.

 1
Author: Andy Schmidt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-08 16:49:23

Prostym podejściem byłoby użycie opcji /MIR, aby odzwierciedlić oba katalogi. Zasadniczo skopiuje tylko nowe pliki do miejsca docelowego. W następnym komand zastąp źródło i miejsce docelowe ścieżkami do folderów, skrypt wyszukuje dowolny plik z dowolnymi rozszerzeniami.

robocopy <source directory> <destination directory> *.* /MIR
 0
Author: Ionut V.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-17 10:25:57

To mi się udało. Używam tego do" dodawania " plików na drugim dysku, bez nadpisywania.

Plik wsadowy: robocopy-missingfiles.bat

@echo off
echo Copying 
echo      "%1"
echo   to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"

Przykład:

robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\

Wykonaj test przed wdrożeniem.

 0
Author: Ramesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 03:07:46