Robocopy: Cách di chuyển nội dung của một thư mục nhưng KEEP thư mục


23

Nhiệm vụ đơn giản:

Di chuyển tất cả nội dung của thư c:\Users\files\Desktop\test 2mục vàoc:\Users\files\Desktop\test 1

C:\admin\temp>robocopy "c:\Users\files\Desktop\test 2" "c:\Users\files\Desktop\test" *.* /S /MOVE

Nghe có vẻ hợp lý, nhưng bây giờ, thư mục cũng c:\Users\files\Desktop\test 2bị xóa. Có một công tắc để chỉ di chuyển NỘI DUNG mà không cần loại bỏ thư mục?


Tại sao Robocopy phải khác với những gì?
John Gardeniers


1
Điều gì về robocopy test1 test2 ... && mkdir test2
jftuga

Cuối cùng tôi đã thay đổi quyền của thư mục chính để bản sao người dùng đang chạy trong không thể xóa chính thư mục đó,
Matthew Lock

Câu trả lời:


14

Tôi đã cố gắng làm điều tương tự từ một chia sẻ mạng.

SET MoveDirSource=\\Server\Folder
SET MoveDirDestination=Z:\Folder

Dưới đây là những phát hiện và giải pháp của tôi từ các thử nghiệm trên máy Windows 7.

Gợi ý:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOVE /E

Vấn đề: Di chuyển thư mục nguồn.

Gợi ý:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOVE /E /XD "%MoveDirSource%"

Vấn đề: Vẫn di chuyển thư mục nguồn.

Gợi ý:

ROBOCOPY "%MoveDirSource%" "%MoveDirDestination%" /MOV /E

Vấn đề: Để lại cấu trúc thư mục trống phía sau trong thư mục nguồn.

Giải pháp làm việc:

MKDIR "%MoveDirDestination%"
FOR    %%i IN ("%MoveDirSource%\*") DO           MOVE /Y "%%i" "%MoveDirDestination%\%%~nxi"
FOR /D %%i IN ("%MoveDirSource%\*") DO ROBOCOPY /MOVE /E "%%i" "%MoveDirDestination%\%%~nxi"

Hai dòng đầu tiên di chuyển các tập tin cấp cao nhất, các thư mục di chuyển thứ ba. Lưu ý %% là để sử dụng trong một tệp bó, dán vào một dòng lệnh cần những thay đổi này thành một dấu phần trăm duy nhất.

~ nxi ở đích là một BIỂU TƯỢNG GIAO DỊCH (Xem FOR /?) trong đó ~ nxi đại diện cho tên và phần mở rộng của mục hiện đang được lặp qua.

Robocopy mặc định để TRẢ LẠI MỘT TRIỆU lần và ĐỔI 30 GIÂY giữa mỗi lần thử, vì vậy bạn có thể muốn thêm / R: 1 / W: 1 vào các đối số robocopy.


8

Bạn đã thử tùy chọn / MOV chưa?

           /MOV :: MOVe files (delete from source after copying).

F:> bản sao /?


ROBOCOPY :: Sao chép tệp mạnh mẽ cho Windows

Bắt đầu: Thứ Sáu 06 Tháng 11 11:51:26 2010

          Usage :: ROBOCOPY source destination [file [file]...] [options]

         source :: Source Directory (drive:\path or \\server\share\path).
    destination :: Destination Dir  (drive:\path or \\server\share\path).
           file :: File(s) to copy  (names/wildcards: default is "*.*").

::
:: Copy options :
::
             /S :: copy Subdirectories, but not empty ones.
             /E :: copy subdirectories, including Empty ones.
         /LEV:n :: only copy the top n LEVels of the source directory tree.

             /Z :: copy files in restartable mode.
             /B :: copy files in Backup mode.
            /ZB :: use restartable mode; if access denied use Backup mode.
        /EFSRAW :: copy all encrypted files in EFS RAW mode.

/COPY:copyflag[s] :: what to COPY for files (default is /COPY:DAT).
                   (copyflags : D=Data, A=Attributes, T=Timestamps).
                   (S=Security=NTFS ACLs, O=Owner info, U=aUditing info).

       /DCOPY:T :: COPY Directory Timestamps.

           /SEC :: copy files with SECurity (equivalent to /COPY:DATS).
       /COPYALL :: COPY ALL file info (equivalent to /COPY:DATSOU).
        /NOCOPY :: COPY NO file info (useful with /PURGE).

        /SECFIX :: FIX file SECurity on all files, even skipped files.
        /TIMFIX :: FIX file TIMes on all files, even skipped files.

         /PURGE :: delete dest files/dirs that no longer exist in source.
           /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).

           /MOV :: MOVe files (delete from source after copying).
          /MOVE :: MOVE files AND dirs (delete from source after copying).

 /A+:[RASHCNET] :: add the given Attributes to copied files.
 /A-:[RASHCNET] :: remove the given Attributes from copied files.

        /CREATE :: CREATE directory tree and zero-length files only.
           /FAT :: create destination files using 8.3 FAT file names only.
           /256 :: turn off very long path (> 256 characters) support.

         /MON:n :: MONitor source; run again when more than n changes seen.
         /MOT:m :: MOnitor source; run again in m minutes Time, if changed.

  /RH:hhmm-hhmm :: Run Hours - times when new copies may be started.
            /PF :: check run hours on a Per File (not per pass) basis.

         /IPG:n :: Inter-Packet Gap (ms), to free bandwidth on slow lines.

            /SL :: copy symbolic links versus the target.

        /MT[:n] :: Do multi-threaded copies with n threads (default 8).
                   n must be at least 1 and not greater than 128.
                   This option is incompatible with the /IPG and /EFSRAW options.
                   Redirect output using /LOG option for better performance.

::
:: File Selection Options :
::
             /A :: copy only files with the Archive attribute set.
             /M :: copy only files with the Archive attribute and reset it.
/IA:[RASHCNETO] :: Include only files with any of the given Attributes set.
/XA:[RASHCNETO] :: eXclude files with any of the given Attributes set.

/XF file [file]... :: eXclude Files matching given names/paths/wildcards.
/XD dirs [dirs]... :: eXclude Directories matching given names/paths.

            /XC :: eXclude Changed files.
            /XN :: eXclude Newer files.
            /XO :: eXclude Older files.
            /XX :: eXclude eXtra files and directories.
            /XL :: eXclude Lonely files and directories.
            /IS :: Include Same files.
            /IT :: Include Tweaked files.

         /MAX:n :: MAXimum file size - exclude files bigger than n bytes.
         /MIN:n :: MINimum file size - exclude files smaller than n bytes.

      /MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
      /MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
      /MAXLAD:n :: MAXimum Last Access Date - exclude files unused since n.
      /MINLAD:n :: MINimum Last Access Date - exclude files used since n.
                   (If n < 1900 then n = n days, else n = YYYYMMDD date).

            /XJ :: eXclude Junction points. (normally included by default).

           /FFT :: assume FAT File Times (2-second granularity).
           /DST :: compensate for one-hour DST time differences.

           /XJD :: eXclude Junction points for Directories.
           /XJF :: eXclude Junction points for Files.

::
:: Retry Options :
::
           /R:n :: number of Retries on failed copies: default 1 million.
           /W:n :: Wait time between retries: default is 30 seconds.

           /REG :: Save /R:n and /W:n in the Registry as default settings.

           /TBD :: wait for sharenames To Be Defined (retry error 67).

::
:: Logging Options :
::
             /L :: List only - don't copy, timestamp or delete any files.
             /X :: report all eXtra files, not just those selected.
             /V :: produce Verbose output, showing skipped files.
            /TS :: include source file Time Stamps in the output.
            /FP :: include Full Pathname of files in the output.
         /BYTES :: Print sizes as bytes.

            /NS :: No Size - don't log file sizes.
            /NC :: No Class - don't log file classes.
           /NFL :: No File List - don't log file names.
           /NDL :: No Directory List - don't log directory names.

            /NP :: No Progress - don't display percentage copied.
           /ETA :: show Estimated Time of Arrival of copied files.

      /LOG:file :: output status to LOG file (overwrite existing log).
     /LOG+:file :: output status to LOG file (append to existing log).

   /UNILOG:file :: output status to LOG file as UNICODE (overwrite existing log).
  /UNILOG+:file :: output status to LOG file as UNICODE (append to existing log).

           /TEE :: output to console window, as well as the log file.

           /NJH :: No Job Header.
           /NJS :: No Job Summary.

       /UNICODE :: output status as UNICODE.

::
:: Job Options :
::
   /JOB:jobname :: take parameters from the named JOB file.
  /SAVE:jobname :: SAVE parameters to the named job file
          /QUIT :: QUIT after processing command line (to view parameters).
          /NOSD :: NO Source Directory is specified.
          /NODD :: NO Destination Directory is specified.
            /IF :: Include the following Files.

2
đúng, nhưng điều này di chuyển CHỈ các tệp và để các thư mục không bị ảnh hưởng, tôi muốn di chuyển các tệp và các thư mục nhưng giữ chính thư mục mẹ
perler

1
-1 câu trả lời không giải quyết được câu hỏi được hỏi
Chris Marisic

1
@Chris. Một chút methinks khắc nghiệt. Câu trả lời là hợp lệ ngoài yêu cầu "thư mục mẹ" và tôi đã yêu cầu làm rõ, điều này chỉ có sẵn sau khi tôi đăng câu trả lời. Sử dụng câu trả lời của tôi, bạn có thể sử dụng tham số / XD hoặc / XA.
Guy

2
Đây thực sự là câu trả lời hoàn hảo cho câu hỏi này. Sử dụng robocopy với công tắc "/ Mov" (không phải công tắc "/ di chuyển") và nhắm mục tiêu thư mục mẹ. Voila !!
John Homer

1
Đây KHÔNG phải là câu trả lời hoàn hảo. Công tắc Mov sẽ không di chuyển thư mục con. / Mov / e sẽ di chuyển tệp nhưng sao chép thư mục con. Nếu bạn chỉ muốn giữ thư mục mẹ, bạn phải xóa các thư mục con trống theo cách thủ công hoặc sử dụng một trong những câu trả lời khác hoạt động
HugoRune

6

Bạn có thể thực hiện việc này bằng cách tạo tệp giữ chỗ trong thư mục bạn không muốn xóa và sau đó hướng dẫn bản sao lưu loại trừ tệp bằng / XF

Vì tệp bị loại trừ, nó sẽ không bị di chuyển và thư mục sẽ không bị xóa.

Để biết chi tiết, hãy xem trang web khác: http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/XP/Q_24306678.html (và cuộn xuống phía dưới, v.v.).


1
Điều này dường như không phải là trường hợp, tôi có chính tập tin bat trong thư mục tôi muốn sao chép, tập tin bat bị loại trừ và robocopy vẫn cố xóa thư mục (và thất bại vì tập tin bat đang chạy).
Chris Marisic

@ Chris-Marisic: Hãy thử chạy tệp bó từ bên ngoài thư mục chứa nó. Nếu bạn cd vào thư mục chứa tệp bó và chạy nó từ đó, bạn sẽ nhận được "Quá trình không thể truy cập tệp vì nó đang được sử dụng bởi một quy trình khác" ngay cả khi bạn sử dụng / XF để loại trừ tệp bó.
RedGreenCode

4

Tôi gặp vấn đề tương tự và chỉ sửa nó bằng MKDIRlệnh sau khi tôi đã chạy robocopy.

Bạn muốn di chuyển tất cả nội dung của một thư mục nhất định, để CHỈ các thư mục mẹ bị bỏ lại phía sau. Vâng, tại sao không chỉ tạo thư mục cha một lần nữa?

Tất nhiên bạn có thể có một số vấn đề về quyền người dùng, nhưng điều đó cũng có thể được giải quyết.


2

Tạo một tệp giữ chỗ duy nhất mà bạn loại trừ khỏi lệnh robocopy.

Một lớp lót như sau:

echo.>>"C:\Source\.touch" && (robocopy "C:\Source" "C:\Dest" /XF ".touch" /MOVE /E & del "C:\Source\.touch")

1

Sử dụng công tắc / Mov thay vì / di chuyển


2
Nó đã được đề xuất trước đó ( serverfault.com/questions/167723/ mài ) và không hoạt động.
sysadmin1138

2
Nó hoạt động. Tôi đang làm điều đó ngay bây giờ !!!! Bạn kiêu ngạo đến mức nào khi nói nó không hoạt động mà không thực sự "thử" nó !!!
John Homer

2
Nó không hoạt động. / Mov sẽ để các thư mục con vào vị trí, không chỉ thư mục mẹ.
HugoRune

1

Giải pháp "của tôi" là di chuyển các tệp và thư mục trong một thư mục tạm thời trong thư mục nguồn. (không tự sao chép thư mục tạm thời vào thư mục đó!) Và sau khi di chuyển thư mục này vào thư mục taget.

set Source=I:\_Test\ToArchive
set target=I:\_Test\Archive
set tempFolderName=@_Copy_in_progress_Do_not_use_@
set LogFile=robocopy-result.log

robocopy.exe %source% %source%\%tempFolderName% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG:%LogFile% /XD %source%\%tempFolderName%
sleep 5
robocopy.exe %source%\%tempFolderName% %target% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG+:%LogFile%

Tôi chỉ phát hiện ra rằng "di chuyển" vào thư mục tạm thời mất quá nhiều thời gian. Đây là bản cập nhật:

set Source=I:\_Test\ToArchive
set target=I:\_Test\Archive
set tempFolderName=@_Copy_in_progress_Do_not_use_@
set LogFile=robocopy-result.log

mkdir %source%\%tempFolderName%\
for /f "delims==" %%I IN ('dir "%source%" /B') do if NOT %%I==%tempFolderName% (move "%source%\%%I" "%source%\%tempFolderName%")
sleep 3
robocopy.exe %source%\%tempFolderName% %target% /E /MOVE /NS /NP /v /W:0 /R:0 /LOG:%LogFile%

1

Tôi đã may mắn tìm được câu trả lời. Tôi muốn di chuyển một thư mục lên cấp cao nhất của đĩa. Tôi đã thử:

Robocopy "<PathToFolderToMove>" "H:\" /MOVE /E

Nó đã đưa ra một lỗi sử dụng như sau cho đích : H:\" \MOVE \E\.

Tôi đoán rằng "\" đã thoát khỏi trích dẫn kép sau đây và tôi đã thay đổi lệnh thành:

Robocopy "<PathToFolderToMove>" "H:\." /MOVE /E

Cuối cùng, nó đã sao chép nội dung của "" vào thư mục gốc của ổ đĩa.

Vì vậy, anwser cho câu hỏi là:

Robocopy "c:\Users\files\Desktop\test 2" "c:\Users\files\Desktop\test\." /MOVE /E

Trân trọng,
Georges


1

Tôi vừa thực hiện một thử nghiệm bằng cách sử dụng các công tắc /mov& /e, và nó hoạt động hoàn hảo.

Lưu ý từ các tùy chọn dòng lệnh, có một sự khác biệt giữa /mov/move. Tệp kiểm tra di chuyển đến đích, giữ nguyên cấu trúc thư mục trên nguồn.


-1

Tại sao nó khác nhau? Nó không khác. Thao tác di chuyển là thao tác sao chép \ xóa, cho dù bạn có sử dụng Robocopy hay không. Bạn đang bảo nó di chuyển thư mục. Di chuyển có nghĩa là bạn di chuyển đến vị trí mới và bỏ trống vị trí trước đó.


nhưng đó không phải là điều tôi muốn tôi muốn di chuyển nội dung của thư mục, giữ thư mục. ở đây cách thức hoạt động, kiểu unix: (chỉnh sửa, không có mã trong nhận xét, vì vậy như một ảnh chụp màn hình) screencast.com/t/YTkwODIzZT
perler

-1 đã đổ lỗi cho câu trả lời của người dùng cho câu hỏi hợp pháp
Chris Marisic

@Chris: Tôi không hiểu. Làm thế nào để tôi đổ lỗi cho người dùng? Anh ấy hỏi một câu hỏi và tôi đã trả lời nó. Tôi không thấy một gợi ý đổ lỗi trong câu trả lời của tôi.
joeqwerty

Why is it different? It's not different.OP đã đăng một ảnh chụp màn hình cho thấy hành vi dự kiến ​​vì nó có thể được thực hiện thông qua * nix nhưng bản sao đó dường như không cho phép ở bất kỳ khía cạnh nào.
Chris Marisic

Các bạn, thật sao? Tranh cãi về điều này? Tôi đã xóa sạch câu hỏi để xóa câu "vi phạm" (và đã tải).
Mark Henderson

-1

chỉ cần thêm \*

C:\admin\temp>robocopy "c:\Users\files\Desktop\test 2\*" "c:\Users\files\Desktop\test"  /S /MOVE

2
Một câu trả lời tốt là một với nhiều lời giải thích được cung cấp ở đây.
kasperd 14/07/2015

nó hoạt động hoàn toàn tốt và làm chính xác những gì op muốn. cũng khá tự giải thích. (dấu gạch chéo ngược bị từ chối bằng cách nào đó)
Tagas

1
@Tagas: Ngay cả khi hoạt động tốt, bạn thực sự nên thêm một lời giải thích.
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.