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 podpowiadaj mi ”.
Przeszedłem przez kopiowanie, przenoszenie, xcopy i robocopy, a jedyne co mogę uzyskać to to, że możesz powiedzieć robocopy „kopiuj A do B, ale nie nadpisuj nowszych plików starszymi”, ale to nie działa dla mnie . Spojrzałem na xxcopy, ale odrzuciłem go, ponieważ nie chcę mieć zależności innej firmy od zdarzenia po kompilacji programu 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 polecenia do zdarzenia po kompilacji w programie Visual Studio 2010, aby pliki generowane z szablonów T4 dla nowych obiektów modelu EF były dystrybuowane do folderów projektu, do których należą, ale ponownie wygenerowane pliki dla istniejących obiektów nie nadpisuj potencjalnie edytowanych plików docelowych.
Ponieważ szablon T4 jest regenerowany, 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 pliku EditorTemplate lub DisplayTemplate * .ascx).
Czy ktoś ma podobne problemy, które rozwiązał?
źródło
cmd.exe
„sfor
polecenia? Jeśli nie, polecam biegaćfor /?
i używać tego.Odpowiedzi:
źródło
~nx
się%~nxF
dokładnie na myśli?~nxF
zmiennaF
zamienia się w nazwę pliku i rozszerzenie.Aby rozwinąć (używając odpowiedzi Hydrargyrum, HailGallaxar i Andy Schmidt):
/E
sprawia, że Robocopy rekurencyjnie kopiuje podkatalogi, w tym puste./XC
wyklucza istniejące pliki z tą samą sygnaturą czasową, ale różnymi rozmiarami plików. Robocopy normalnie je nadpisuje./XN
wyklucza istniejące pliki nowsze niż kopia w katalogu docelowym. Robocopy normalnie je nadpisuje./XO
wyklucza istniejące pliki starsze niż kopia w katalogu docelowym. Robocopy normalnie je nadpisuje.Po wykluczeniu klas Changed, Older i Newer Robocopy robi dokładnie to, czego chce oryginalny plakat - bez konieczności ładowania środowiska skryptowego.
Źródła : Technet , Wikipedia Do
pobrania: łącze pobierania firmy Microsoft (ostatnio sprawdzono łącze 30 marca 2016 r.)
źródło
/e
? A jeśli/s
zamiast tego użyjesz ? Nie chcę wielu pustych podfolderów.Rozwiązanie Belizariusza jest dobre.
Aby rozwinąć tę nieco zwięzłą odpowiedź:
/E
sprawia, że Robocopy rekurencyjnie kopiuje podkatalogi, w tym puste./XC
wyklucza istniejące pliki z tą samą sygnaturą czasową, ale różnymi rozmiarami plików. Robocopy normalnie je nadpisuje./XN
wyklucza istniejące pliki nowsze niż kopia w katalogu źródłowym. Robocopy normalnie je nadpisuje./XO
wyklucza istniejące pliki starsze niż kopia w katalogu źródłowym. Robocopy normalnie je nadpisuje.Po wykluczeniu klas Changed, Older i Newer Robocopy robi dokładnie to, czego chce oryginalny plakat - bez konieczności ładowania środowiska skryptowego.
źródło
Możesz spróbować tego:
-y
po prostu wyświetla monity przed nadpisaniem i możemy przesłać n do wszystkich tych pytań. Więc w zasadzie wystarczyłoby to skopiować nieistniejące pliki. :)źródło
copy /-y
że automatycznie zakłada się, że nie, gdy w stdin zabraknie danych wejściowych. Możesz pominąć pierwszą jawnąn
lub przeliczyć< nul
na nią potok i to samo się stanie.Tutaj jest w postaci pliku wsadowego:
źródło
Chcę tylko wyjaśnić coś z moich własnych testów.
@Hydrargyrum napisał:
To faktycznie jest wstecz. XN wykonuje „wykluczaj nowsze” pliki, ale wyklucza pliki nowsze niż kopia w katalogu docelowym . XO wykonuje „Wyklucz starsze”, ale wyklucza pliki starsze niż kopia w katalogu docelowym .
Oczywiście zrób własne testy, jak zawsze.
źródło
Jest na to dziwny sposób z xcopy:
Po prostu dołącz tyle n, ile plików, które kopiujesz, a to odpowie n na wszystkie nadpisane pytania.
źródło
copy
, zobacz tę odpowiedź , a konkretnie komentarz @mwfearnley:copy /-y
automatycznie zakłada, żen
po wyczerpaniu stdin możesz np.echo n
Tylko raz i nadal działa./ XX: eXclude „eXtra” pliki i katalogi (obecne w miejscu docelowym, ale nie w źródle). Zapobiegnie to usunięciu z miejsca docelowego. (to jest ustawienie domyślne)
źródło
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 (do instalacji nie jest wymagane ponowne uruchomienie)
Pamiętaj, aby ustawić swoją ścieżkę do pliku robocopy exe. Aby to zrobić, kliknij prawym przyciskiem myszy "mój komputer"> właściwości> zaawansowane> "Zmienne środowiskowe", a następnie znajdź zmienną systemową ścieżki i dodaj ją na końcu: "; C: \ Program Files \ Windows Resource Kits \ Tools" lub gdziekolwiek zainstalowałem go. Pamiętaj, aby zostawić ciągi zmiennych ścieżki, które już tam istnieją, i po prostu dołączyć dodatkową ścieżkę.
Po ustawieniu ścieżki możesz uruchomić polecenie sugerowane przez belizariusza. Działa świetnie.
źródło
Nie pozwoli mi bezpośrednio komentować niepoprawnych wiadomości - ale pozwól mi tylko ostrzec wszystkich, że definicje opcji / XN i / XO są ODWRÓCONE w porównaniu z tym, co zostało opublikowane w poprzednich wiadomościach.
Opcja Wyklucz starsze / nowsze pliki jest zgodna z informacjami wyświetlanymi w dzienniku RoboCopy: RoboCopy będzie iterować przez ŹRÓDŁO, a następnie raportować, czy każdy plik w ŹRÓDŁU jest „STARSZY” lub „NOWSZY” niż plik w miejscu docelowym.
W konsekwencji / XO wykluczy pliki STARSZE ŹRÓDŁO (co jest intuicyjne), nie „starsze od źródła”, jak zostało to tutaj stwierdzone.
Jeśli chcesz skopiować tylko nowe lub zmienione pliki źródłowe, ale uniknąć zastępowania nowszych plików docelowych, to / XO jest właściwą opcją do użycia.
źródło
Prostym podejściem byłoby użycie opcji / MIR, aby odzwierciedlić dwa katalogi. Zasadniczo skopiuje tylko nowe pliki do miejsca docelowego. W następnym poleceniu zastąp źródło i miejsce docelowe ścieżkami do twoich folderów, skrypt wyszuka dowolny plik z dowolnymi rozszerzeniami.
źródło
To właśnie zadziałało dla mnie. Używam tego do „dodawania” plików na inny dysk, bez nadpisywania.
Plik wsadowy: robocopy-missingfiles.bat
Przykład:
Wykonaj test przed wdrożeniem.
źródło