Robocopy : 디렉토리의 내용을 이동하지만 디렉토리를 유지하는 방법


23

간단한 작업 :

디렉토리의 모든 내용 c:\Users\files\Desktop\test 2c:\Users\files\Desktop\test 1

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

합리적으로 들리지만 이제는 디렉토리 c:\Users\files\Desktop\test 2도 제거됩니다. 디렉토리 자체를 제거하지 않고 컨텐츠를 이동시키는 스위치가 있습니까?


Robocopy가 왜 다른 것과 달라야합니까?
John Gardeniers


1
robocopy test1 test2는
어떻습니까

기본 디렉토리의 권한을 변경하여 사용자 robocopy가 실행중인 경우 해당 디렉토리 자체를 삭제할 수 없었습니다.
Matthew Lock

답변:


14

네트워크 공유에서 동일한 작업을 시도했습니다.

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

다음은 Windows 7 컴퓨터에서 테스트 한 결과 및 해결책입니다.

암시:

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

문제 : 소스 폴더를 이동합니다.

암시:

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

문제 : 여전히 소스 폴더를 이동합니다.

암시:

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

문제 : 원본 폴더에 빈 폴더 구조가 남습니다.

작업 솔루션 :

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

처음 두 줄은 최상위 파일을 이동하고 세 번째 줄은 폴더를 이동합니다. 이중 %%는 배치 파일에서 사용하기위한 것이므로 명령 줄에 붙여 넣으려면 단일 백분율 표시로 변경해야합니다.

대상의 ~ nxi는 FOR SUBSTITUTION VARIABLE (FOR /? 참조)입니다. 여기서 ~ nxi는 현재 반복되는 항목의 이름과 확장을 나타냅니다.

Robocopy는 기본적으로 RETRY MILLION 번과 WAIT 30 SECONDS를 시도 할 때마다 robocopy 인수 에 / R : 1 / W : 1 을 추가 할 수 있습니다 .


8

/ MOV 옵션을 사용해 보셨습니까?

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

F :> 로보 카피 /?


ROBOCOPY :: Windows 용 강력한 파일 복사

시작 : 금 8 월 06 일 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
예, 그러나 이것은 단지 파일을 이동시키고 디렉토리를 건드리지 않습니다. 파일과 디렉토리를 옮기고 싶지만 부모 디렉토리 자체를 그대로 유지하고 싶습니다
perler

1
문제를 해결하지 않는 -1 대답은 질문
크리스 Marisic에게

1
@ 크리스. 약간 거친 가려움증. 대답은 "부모 디렉토리"요구 사항과는 별도로 유효하며 답을 게시 한 후에 만 ​​사용할 수있는 설명을 요청했습니다. 내 대답을 사용하면 / XD 또는 / XA 매개 변수를 사용할 수 있습니다.
Guy

2
이것은 실제로이 질문에 대한 완벽한 답입니다. "/ move"스위치가 아닌 "/ mov"스위치와 함께 robocopy를 사용하고 상위 디렉토리를 대상으로합니다. 짜잔 !!
John Homer

1
이것은 완벽한 대답이 아닙니다. mov 스위치는 하위 디렉토리를 이동하지 않습니다. / mov / e는 파일을 이동하지만 하위 디렉토리는 복사 합니다. 당신은 단지 부모 디렉토리를 유지하려면 수동으로 빈 하위 디렉토리를 제거하거나 다른 답변 중 하나를 사용해야합니다 작업이
HugoRune

6

삭제하지 않으려는 디렉토리에 자리 표시 자 파일을 만든 다음 / XF를 사용하여 파일을 제외하도록 robocopy에 지시하여이를 수행 할 수 있습니다.

파일이 제외되므로 이동되지 않으며 디렉토리가 삭제되지 않습니다.

자세한 내용은 다음 사이트를 참조하십시오 : http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/XP/Q_24306678.html (그리고 아래로 스크롤하는 등).


1
이것은 사실이 아닌 것 같습니다. 복사하려는 디렉토리에 박쥐 파일 자체가 있고 박쥐 파일이 제외되고 robocopy는 여전히 폴더를 삭제하려고 시도합니다 (박쥐 파일이 실행 중이기 때문에 실패합니다).
Chris Marisic

@ Chris-Marisic : 배치 파일이있는 디렉토리 외부에서 배치 파일을 실행하십시오. 배치 파일이 포함 된 디렉토리로 CD를 넣고 거기서 실행하면 / XF를 사용하여 배치 파일을 제외하더라도 "다른 프로세스에서 파일을 사용 중이기 때문에 프로세스가 파일에 액세스 할 수 없습니다"가 표시됩니다.
RedGreenCode

4

동일한 문제가 발생하여를 MKDIR실행 한 후 명령으로 문제를 해결 했습니다 robocopy.

주어진 폴더의 모든 내용을 이동하여 상위 폴더 만 남도록합니다. 부모 폴더를 다시 만드는 것이 어떻습니까?

물론 일부 사용자 권한 문제가있을 수 있지만 해결 될 수도 있습니다.


2

robocopy 명령에서 제외 할 고유 플레이스 홀더 파일을 작성하십시오.

하나의 라이너는 다음과 같습니다.

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


1

"내"솔루션은 소스 폴더의 임시 폴더 내에서 파일과 폴더를 이동하는 것입니다. (임시 폴더를 자체 폴더에 복사하지 마십시오!) 그리고이 폴더를 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%

임시 폴더로 "이동"하는 데 시간이 너무 많이 걸린다는 것을 알았습니다. 여기 업데이트 :

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

답을 찾아서 운이 좋았습니다. 폴더를 디스크의 최상위 레벨로 옮기고 싶었습니다. 나는 시도했다 :

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

대상에 대해 다음을 사용하여 오류가 발생 H:\" \MOVE \E\했습니다..

"\"가 다음 큰 따옴표를 이스케이프한다고 생각하고 명령을 다음과 같이 변경했습니다.

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

결국 ""의 내용을 드라이브의 루트에 복사했습니다.

따라서 질문에 대한 답은 다음과 같습니다.

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

감사합니다.
Georges


1

방금 /mov& /e스위치를 사용하여 테스트를 수행했으며 완벽하게 작동합니다.

명령 행 옵션에서 알 수 있듯이 /mov와와 는 차이가 /move있습니다. 테스트 파일이 대상으로 이동하여 소스의 디렉토리 구조는 그대로 유지됩니다.


-1

왜 다른가요? 다르지 않습니다. 이동 작업은 Robocopy 사용 여부에 관계없이 복사 / 삭제 작업입니다. 폴더를 이동하라는 메시지가 표시됩니다. 이동은 새 위치로 이동하여 이전 위치를 비 웁니다.


그러나 그것은 내가 원하는 것이 아닙니다. 폴더의 내용을 이동하면서 폴더를 유지하고 싶습니다. 작동 방식, 유닉스 스타일 : (편집, 코멘트에 코드가 없으므로 스크린 샷과 같이) screencast.com/t/YTkwODIzZT
perler

-1 합법적 인 질문에 대한 사용자 응답 비난에 대해
크리스 Marisic

@Chris : 이해가 안 돼요. 사용자를 어떻게 비난합니까? 그는 질문을하고 대답했습니다. 내 대답에 비난의 힌트가 표시되지 않습니다.
joeqwerty

Why is it different? It's not different.OP는 * nix를 통해 수행 될 수있는 예상되는 동작을 보여주는 스크린 샷을 게시했지만 로보 스코프는 어떤면에서도 허용되지 않는 것 같습니다.
Chris Marisic

얘들 아, 정말? 이것을 논쟁? "불쾌"(및로드 된) 문장을 제거하기 위해 질문을 정리했습니다.
Mark Henderson

-1

그냥 \ *를 추가하십시오

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

2
좋은 대답은 여기에 제공된 추가 설명이있는 것입니다.
kasperd

그것은 완벽하게 잘 작동하고 op가 원하는 것을 정확하게 수행합니다. 또한 꽤 자명하다. (역 슬래시는 어떻게 든
흩어짐

1
@Tagas : 제대로 작동하더라도 설명을 추가해야합니다.
Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.