Robocopy는 루트 폴더와 타임 스탬프를 복사하지 않습니다


10

Robocopy는 루트 폴더와 타임 스탬프를 복사하지 않습니다-모든 하위 디렉토리와 파일을 복사합니다 (적절한 옵션이 설정된 경우) Robocopy에 루트 폴더 자체와 타임 스탬프 또는 속성을 원한다는 옵션 / 인수가없는 것 같습니다 그대로 복사됩니다.

C : / Brushes를 복사하고 싶습니다

Robocopy는 모든 하위 디렉토리와 파일을 대상 폴더에 복사하지만 모든 관련 속성 및 타임 스탬프와 함께 브러시 폴더 자체에는 복사하지 않습니다.

내가 무엇을 요구하는지 이해합니까? 이것은 매우 기본이며 Robocopy에는 옵션이없는 것 같습니다. 사람들은 다양한 포럼에서 이전에 질문을 제기했지만 관심있는 한 아무도 그 질문에 대답하지 않았습니다.

여기에 이미지 설명을 입력하십시오


1
이것은에 대한 내 경험을 바탕으로 한 전단지 rsync이지만 대상 폴더 끝에 슬래시가 없으면 어떻게합니까? GUI를 사용하는 대신 명령 줄 수준에서 스크립트를 수정하려고하면 어떻습니까? 명령 줄 도구가 필요한 작업을 수행한다는 사실을 알고 있습니다.

@ Randolph West : 현재 대상 폴더 끝에 슬래시가 없습니다. 여전히 실제 복사 작업에서 Robocopy에 소스 폴더 및 해당 속성 등을 포함시킬 수 없습니다. 어떤 아이디어?
ptrcao

robocopy에 대한 솔루션이 없으면 xxcopy를 볼 수 있습니다 (프리웨어 및 상용 버전이 있음).
harrymc

그렇습니다. 완전히 이해하고 아래에 작동 솔루션을 추가했습니다. 실제 문제는 복사하지 않을 루트에 모든 파일과 폴더를 지정해야한다는 것입니다.
opsin

답변:


9
robocopy %1 "C:\DestinationDirectory\%~n1" /E /V /DCOPY:T /LOG:"C:\DestinationDirectory\Copied.txt" /R:10 /W:30 

폴더를에 bat놓거나 보내기 에서 사용 하십시오 . 소스 디렉토리의 이름 및 타임 스탬프가있는 폴더를 만들고 모든 파일을 복사합니다.


정말 고마워요, 그 마법 % ~ n1 연산자를 찾고있었습니다
hotzen

@hotzen, 어떻게 %~n1합니까?
Pacerier


"% 1을 파일 이름으로 확장합니다."
hotzen April

Microsoft는 모든 링크를 끊었습니다. 여기에는 배치에 대한
틸트

3

OP에 동의합니다. 루트 폴더를 복사 할 수 없다는 것은 robocopy의 큰 단점입니다. 브러쉬 폴더를 속여서 임시 폴더로 옮기고 임시 폴더에서 로보 카피 작업을 수행 한 다음 다시 옮기는 것은 어떻습니까?

다음과 같은 것 :

md "c:\verytemporary" && move "c:\brushes" "C:\verytemporary"||( echo Line 1 error occurred & goto :eof )
robocopy c:\verytemporary d:\ /MIR /DCOPY:T
move "c:\verytemporary\brushes" "c:\" && rd /q "c:\verytemporary"||echo Line 3 error occurred

2

md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes올바른 경로를 대체하여 명령 행에서 시도하십시오 .


3
예, 그러나 원본 C : \ brushes 폴더의 속성이없는 새 폴더를 만들고 있습니까?
ptrcao

2

나는 어떤 대답에도 좋고 쉬운 해결책이 없다는 것을 알 수 있습니다.

robocopy에 대한 솔루션이 없으면 xxcopy를 볼 수 있습니다 (프리웨어 및 상용 버전이 있음).

물론 robocopy에 대한 다른 많은 대안이 있으며, 일부는 여기 에 나열되어 있습니다 . 최상의 무료 파일 복사 유틸리티를
참조하십시오 .


1
xxcopy훌륭한 유틸리티이지만 프리웨어 버전에는 많은 명령 행 스위치 목록을 사용하는 경우 응답해야한다는 프롬프트가 있습니다. xxcopy이 추가 프롬프트는 명령 창에서 사용하면 자극적입니다. 그러나 xxcopy배치 파일에서 전혀 사용하지 못하게 합니다.
Kevin Fegan

1

user105198의 대답은 반쯤입니다.

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes 실제로 새 폴더를 만듭니다. / MIR 및 / DCOPY : T 를 추가해야 합니다.

으로 / 미르의 대상 디렉토리가 존재하는 경우 옵션, 대상 디렉토리 보안 설정을 덮어 씁니다. 테크넷

/DCOPY:T :: COPY Directory Timestamps.

소스 디렉토리의 속성과 타임 스탬프는 생성 된 폴더에 미러링됩니다.

그래서:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T

1

폴더 타임 스탬프 (/ DCOPY : T)를 복사하도록하면 Robocopy가 원하는대로 작동한다는 것을 알게 될 것입니다. 내 실험에서 Robocopy에 대해 다음과 같은 (문서화되지 않은) 동작이 사실이라는 것을 알았습니다.

대상 디렉토리가 존재하는지 또는 존재하지 않거나 소스 디렉토리와 이름이 다른지 여부에 관계없이 소스 디렉토리의 지정된 모든 특성이 대상 디렉토리에 적용됩니다.

지정된 속성에는 보안 정보 (/ SEC) 또는 폴더 타임 스탬프 (/ DCOPY : T)가 포함될 수 있습니다.

따라서 다음 예에서 c : \ destination \ folder에는 c : \ source \ folder와 동일한 타임 스탬프가 할당됩니다.

robocopy c:\source\folder C:\destination\folder /E /DCOPY:T

Windows 7, Windows 8 및 Windows 2003 Resource Kit (/ SEC 매개 변수 만)에 포함 된 Robocopy 버전으로이를 테스트했습니다. 최신 버전의 Robocopy (XP026 이상) 만 / DCOPY : T 매개 변수를 지원합니다.


0

당신이 결합하는 경우 /IF :: Include the following Files./E :: copy subdirectories, including Empty ones.당신은 (가까운) 원하는 효과를 얻을 수 :

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"

1
"가까이"란 무슨 뜻입니까? 당신이 의미하는 한계는 무엇입니까?
ptrcao

위험 윌 로빈슨 !!! 귀하의 제안은 현재 폴더의 모든 폴더를 복사하는 것으로 보이지만 "브러쉬"로 시작하는 폴더로 제한하지 마십시오
GlennFromIowa

0

Robocopy는 실제로 그렇게 쉽게 설계되지 않았습니다. 그러나 방법이 있습니다.

루트 폴더에는 50 개의 파일과 40 개의 폴더가 있습니다. 폴더 X 만 원하지만 시간 및 날짜 스탬프도 필요합니다.

ROBOCOPY c:\ d:\ /XF 50 root file names c:\boot.ini c:\bla.txt etc. /XD c:\windows c:\drivers c:\temp etc. /S /E /SEC /DCOPY:T

/ DCOPY : T는 폴더 타임 스탬프를 유지하도록 지시합니다. / XF는 복사하지 않을 파일을 지정하고 / XD는 복사하지 않을 폴더를 지정합니다. c : \ X 폴더를 지정하지 마십시오.

이것의 주요 단점은 루트의 모든 폴더와 파일 이름을 조사하고 구체적으로 여기에서 모두 호출하는 것입니다. 다른 시스템 에서이 작업을 많이 수행하면 스크립트를 작성할 수 있습니다.

작업 예

robocopy c : \ testing c : \ abc / XF c : \ testing \ Testing.txt / XD "C : \ testing \ New Folder (2)" "C : \ testing \ New 폴더 (3)"/ S / E / SEC / DCOPY : T

루트 작업 예

robocopy c : \ d : \ / XF c : \ Testing.txt / XD "C : \ 새 폴더 (2)" "C : \ 새 폴더 (3)"/ S / E / SEC / DCOPY : T

내 테스트는 몇 개의 폴더와 하위 폴더를 만들었습니다.이 경우 c : \ testing은 루트 였고 c : \ abc는 다른 드라이브의 루트였습니다. 루트에서 원하는 폴더를 "새 폴더"라고합니다. / XD에 지정하지 않은 것을 알 수 있습니다. 또한 c : \를 지정해야합니다. 그렇지 않으면 사용하는 이름이 전역 이름이됩니다. 즉, Testing.txt 파일에서 c : \ testing을 지정하지 않으면 복사되는 모든 하위 폴더에서 생략됩니다. / SEC는 모든 파일 보안 및 타임 스탬프를 복사합니다.


흠, 모든 루트 파일을 제외하기 위해 / XF c : *. *를 사용할 수 있다고 가정합니다. 전화가 아닌 컴퓨터 앞에있을 때 테스트 해 보겠습니다.
opsin

아니요, c : *. *가 유효하지 않으므로 모든 파일을 수동으로 나열해야합니다.
opsin

0

이론적으로 /DCOPY:T는 모든 문제를 해결해야합니다.

그러나 나는 이것이 일어나는 것을 보았고 그것을 "버그"라고 확신하지는 않지만 오히려 일련의 작업 (OK, 버그)의 결과라고 확신합니다.

이 명령은 모든 파일을 복사하는 작업을해야 C:\Brushes하는 D:\NEWBrushes, 그리고 /DCOPY:T소스 폴더의 타임 스탬프가 대상 폴더에 복사되도록해야한다 :

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

내가 본 (적어도 일부 버전의 Robocopy에서)은 명령이 성공하지만 D:\NEWBrushes폴더 의 타임 스탬프가 현재 날짜와 시간으로 설정되어 있다는 것입니다.

따라서 /DCOPY:T복사중인 "기본"(최상위) 폴더에는이 기능이 작동하지 않는 것 같습니다.

나는 그것이 작동하고 있다고 생각하지만 대상 폴더의 타임 스탬프는 나중에 작업 순서에서 뒤 따르는 작업에 의해 "단계 화"되고 있습니다.

내가 믿는 것은이 명령에 대해 일어나고 있습니다.

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

이 같은 것입니다 :

  1. 폴더 D:\NEWBrushes가없는 경우 폴더 만들기
  2. 타임 스탬프를 C:\Brushes에서D:\NEWBrushes
  3. 에서 파일 및 서브 폴더를 복사 C:\BrushesD:\NEWBrushes

3 단계에서 폴더 내용을 수정 D:\NEWBrushes하면 타임 스탬프 D:\NEWBrushes가 변경됩니다.

저에게있어 "해결책"은 robocopy명령 을 실행 하여 파일과 폴더를 복사 한 다음 (같은) robocopy명령을 다시 실행하는 것입니다.

따라서 처음 실행할 때 :

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

모든 파일과 폴더가 복사됩니다. 그런 다음 다시 실행하십시오.

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
  (or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T

두 번째로 robocopy실행하면 파일이나 폴더 D:\NEWBrushes가 수정 되지 않으며 /DCOPY:T옵션은 첫 번째 실행 이후에 변경된 폴더 / 파일이없는 한 robocopy타임 스탬프를 복사하도록 C:\Brushes지시 합니다.D:\NEWBrushesC:\Brushesrobocopy


-1

robocopy를 사용하여 정말 빠르고 쉬운 백업 스크립트를 위해 지금 루트 폴더를 해결하고 있습니다. 예가 있습니다. 누구에게나 도움이되어야합니다 :

$Destination="F:\Backup" #change destionation backup drive and foder
$BackupDirs="d:\folder1", "d:\folder2", "d:\folder3\subfolder", "d:\fodler4\subfolder\subsubfodler" #change source folders

#make a loop for every source folder
foreach ($Backup in $BackupDirs) {

#split folder name
$fdname = Split-Path $Backup -leaf

#define folder to create in destionation
$dirtocreate = Join-Path $Destination $fdname

#make directory, yes, some extra script to skip when exist should be in place, but -erroraction solved this in lazy mode :)
md $dirtocreate -ErrorAction SilentlyContinue 

#copy with subfolders and log
robocopy $backup $dirtocreate  /s /nfl /ndl /log:c:\scripts\backup.log

}

이 PowerScript를 사용하면 문제가 해결됩니다.
Pimp Juice IT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.