2011-09-18 12 views
11

Próbuję napisać plik wsadowy Windows, który pozwoli mi przenieść wszystkie katalogi z określonego katalogu źródłowego do katalogu docelowego, który istnieje w tym katalogu źródłowym.Polecenie wsadowe Windows do przenoszenia wszystkich folderów w katalogu z wyjątkami

Oczywiście moje polecenie przeniesienia z koniecznością zastosowania tylko do katalogów, a także wyklucza przetwarzanie katalogu docelowego.

Czy jest to możliwe przy użyciu polecenia wsadowego Windows?

Odpowiedz

10

Robocopy (obecny w najnowszych wersjach okien lub do pobrania z WRK) może to zrobić, wystarczy użyć przełącznika /xd, aby wykluczyć katalog docelowy z kopii;

robocopy c:\source\ c:\source\target\ *.* /E /XD c:\source\target\ /move 
+0

Co o wielu wyjątkach lub wielu katalogach do pominięcia w ruchu? Popraw swoją odpowiedź, dodając ją również. –

1

To nie zadziała - dostaniesz błąd informujący, że katalog docelowy znajduje się w katalogu źródłowym, nawet jeśli jawnie wykluczasz katalog docelowy. Możesz przenieść katalogi do tymczasowej lokalizacji, która nie znajduje się pod źródłem, a następnie przenieść je do miejsca docelowego.

BTW, używając polecenia move nie pozwala określić folderów do wykluczenia. Do tego możesz użyć xcopy, ale zwróć uwagę, że będzie to kopiować folderów, w przeciwieństwie do przenieść je. Jeśli to ma znaczenie, możesz usunąć to, co chcesz, po prostu upewnij się, że nie usuniesz katalogu docelowego, który znajduje się w katalogu źródłowym ...

7
FOR /d %%i IN (*) DO IF NOT "%%i"=="target" move "%%i" target 
1

Korzystanie robocopy dołączone do systemu Windows 7, znalazłem opcja/XD nie przeszkodziło folder źródłowy również z przeniesieniem.

Rozwiązanie:

SET MoveDirSource=\\Server\Folder 
SET MoveDirDestination=Z:\Folder 
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi" 

To pętle przez najlepszych folderów szczebla i biegnie robocopy dla każdego.

1

UWAGA: Robocopy wspomniany powyżej przy użyciu flagi/move skopiuje pliki, a następnie usunie je z folderu źródłowego, zamiast przesuwając pliki. To może być krytyczny, jeśli przeniesienie dużej liczby plików z jednego miejsca do drugiego na tym samym dysku (bo ruch jest praktycznie natychmiastowe, natomiast kopiowanie jest znacznie wolniejsze działanie)

0

Działa to dla mnie:

move c:\fromDir\*.* c:\toDir\ 
+0

przynajmniej na winserver2012r2, działa to tylko w przypadku przenoszenia plików, ale nie podkatalogów - i nie obejmuje żadnej opcji "wyjątków" – quetzalcoatl

Powiązane problemy