2016-09-27 3 views
0

robocopy를 사용하여 디렉토리에서 폴더/파일을 삭제합니다. minage를 사용하여 폴더 및 파일을 이동하는 스크립트

스크립트 :

C : \ (12 일 이전) 소스 \ 디렉토리 \의은 File2.txt

C : \ 소스 \ directory2 \

SET source1=c:\source 
    SET destination=F:\destination 
    SET switch1=/r:10 /w:1 /e /create /minage:10 /mt /LOG:F:\logs\backup.log 

    FOR /d %%i IN ("%source1%\*") DO ROBOCOPY "%%i" "%destination%\%%~nxi" %switch1% 
    FOR /d %%p IN ("%source1%\*") DO RMDIR "%%p" /s /q 
    FOR /d %%q IN ("%destination%\*") DO RMDIR "%%q" /s /q 

소스 디렉토리는 다음과 같습니다

FOR /d %%p IN ("%source1%\*") DO RMDIR "%%p" /s /q 
(5 일 이전) file2.txt는

내 문제는 스크립트에서이 라인

그 라인은 소스에서 복사 된 디렉토리 인 RMDIR뿐만 아니라 모든 디렉토리를 제거합니다. 그리고 참고로, 나는 소스 디렉토리를 삭제할 것이므로 사용/이동할 수 없습니다./mov를 사용하면 모든 하위 디렉토리가 삭제되지 않습니다.

내가 여기 잘못 생각한 이유는 무엇입니까? 미리 감사드립니다.

편집 : 문제 해결을 위해 원본 디렉터리 dir/tw/s 정보를 포함합니다. ABT 폴더는 삭제해야하는 폴더입니다. robocopy 폴더 제거를 제외한 모든 것을 처리 할 수 ​​

Directory of C:\ 

09/27/2016 03:08 PM <DIR> . 
09/27/2016 12:10 PM <DIR> .. 
09/27/2016 03:09 PM <DIR> New Folder 
06/25/2014 05:47 AM <DIR> abt 
       0 File(s) 

Directory of C:\New folder 

09/27/2016 03:09 PM <DIR> 
09/27/2016 03:08 PM <DIR> 
09/27/2016 03:09 PM 
       1 File(s) 

Directory of C:\abt 

06/25/2014 05:47 AM <DIR> 
09/27/2016 03:08 PM <DIR> 
03/20/2014 10:08 AM 
06/25/2014 05:47 AM 
04/28/2014 02:33 PM 
05/20/2014 10:47 AM <DIR> 
02/18/2014 07:24 PM 
05/20/2014 10:51 AM 
       5 File(s) 

Directory of C:\abt\Scripts 

05/20/2014 10:47 AM <DIR> 
06/25/2014 05:47 AM <DIR> 
10/02/2012 11:18 AM 
02/02/2012 12:16 PM 
02/17/2012 11:32 AM 
+0

물론 'rmdir/S'는 모두 삭제합니다. '/ MOVE' 옵션을'robocopy'에 추가하여 일치하는 파일과 디렉토리를 목적지로 이동 시키면'for/D %% p '명령 줄 전체를 생략 할 수 있습니다 ... – aschipfl

+0

/move will delete 부모 디렉토리 (소스 디렉토리). 나는 그것을 지킬 수 있어야한다. 그러면 'c : \ source'가 제거됩니다. 또한/mov를 사용하면 서브 디렉토리의 'c : \ source'아래를 삭제하지 않습니다. –

+0

forfiles를 사용하여 연령 테스트를 수행 한 다음 필요한 모든 명령을 작성할 수 있습니다. 'forfiles/D -10/C "cmd/c if is isir == TRUE 에코 복사 @relPath"' – FloatingKiwi

답변

2

경우, 당신이해야 할 유일한 것은 robocopy 폴더를 삭제할 수 없습니다 보장합니다.

원본 폴더를 현재 활성 디렉토리로 설정하면됩니다. 사용중인 폴더는 제거 할 수 없습니다.

SET "source1=c:\source" 
SET "destination=F:\destination" 
SET "switch1=/move /e /create /minage:10 /r:10 /w:1 /LOG+:F:\logs\backup.log" 

pushd "%source1%" && (
    robocopy . "%destination%" %switch1% 
    popd 
) 

유일한 단점은 robocopy 그것을 사용하고 있기 때문에 원본 폴더를 삭제할 수 없다는 오류를 보여줄 것입니다.

+0

이 파일은 엉망입니다. 그러나이 방법으로 일괄 처리를 실행하면 c : \ source1 \ abt 폴더의 시작일이 10 일이 넘었고 일괄 처리가 현재 날짜까지 실행 된 후에 해당 날짜가 변경된 것을 보았습니다. "abt"폴더 아래에 "scripts"폴더가 있습니다. 또한이 폴더는 10 일보다 오래된 날짜가 있었으며 일괄 실행 후 현재 날짜로 변경됩니다. 따라서 "abt"폴더 아래의 모든 파일이 "c : \ source1 \ abt"및 "c : \ source1 \ abt \ scripts"뒤에 남겨진 대상으로 이동합니다. 그러나 "c : \ source1 \ New Folder"폴더는 이동하거나 변경하지 않습니다. –

+0

기본적으로 source1을 현재 활성 디렉토리로 설정하지 않고 원래 실행했을 때와 똑같은 작업을 수행하며/mov 명령을 사용합니다. –

+0

이것이 중요한지는 모르겠지만 C :는 실제로 네트워크 공유입니다. 공용 웹 목적으로 C : \를 사용하여 마스킹했습니다. –