2017-03-08 4 views
-3

그래서에 육일보다 오래된 파일을 이동,이가 반복적으로 배치 스크립트를 사용하여 폴더를 이동하고 하위 폴더

\ foo는 \ foo1은 \ foo는 \ 파일 \ 아카이브

같은 것입니다 큰 파일 트리를

\ foo는 \에서는 foo2 \ foo는 파일 \ 아카이브 \

\ foo는 \ foo3 \ foo는 \ 파일 \ 아카이브

\ foo는 \ foo4 \ foo는 \ 파일 \ 아카이브 내 목표는

가되게합니다 느긋하게 할 수있다. p 폴더를 각각 "\ files"폴더에 넣고 해당 폴더의 파일을 "\ archive"폴더로 옮깁니다.

이상적으로 .bat 스크립트가 가장 적합합니다. 저는 이런 종류의 것들에 관해서는 정말로 초보자이고 일반적으로 이러한 종류의 작업을 수행하기 위해 robocopy를 사용합니다. 그러나 파일 구조가 너무 빽빽하여 코드를 50 + 라인으로 작성하는 것이 먼 길을가는 것처럼 보입니다.

목표 파일과 아카이브 위치가 포함 된 또 다른 7 개의 폴더가 포함 된 16 개의 폴더로 드릴 다운해야하며 대상 파일이 최대 수명을 초과하는지 여부를 결정한 다음 해당 파일이있는 서브 디렉토리로 이동하십시오 최대 수명을 초과하는 경우 대상 위치 내부로 이동합니다. 내가 바로 당신을 이해하면

+0

을 나는 아무것도 삭제하려고하지 않고있다. 필자는 대상 파일과 보관 위치가 포함 된 또 다른 7 개의 폴더가 포함 된 16 개의 폴더로 드릴 다운해야하며 대상 파일이 최대 수명을 초과하는지 여부를 결정한 다음 대상 위치 내에있는 하위 디렉터리로 이동해야합니다 그들이 최대 연령을 초과하면. 미안해하지 않으면 미안해. –

+2

그래서'del' 대신'move'를 사용하십시오. – SomethingDark

+0

이 작업을 수행하고 명시 적 'target'및 'source'명령을 사용하면됩니다. 내가 일반적으로 robocopy를 사용하는 것처럼 나는 이것을 달성하기 위해 112 줄의 코드를 작성해야 할 것이다. 다른 방법을 찾지 못하면이 방법을 사용합니다. 그러나 이것을 처리하는 더 좋은 방법이 있다고 확신합니다. –

답변

0
for /f "delims= " %%t in ('robocopy . . /njh /njs')do set "Tab=%%t" 
pushd D:\ 
for /d /r %%i in (archive.?)do ( 
    pushD %%i 
    for /f "Tokens=3 delims=%tab%" %%n in ('robocopy /L .. %%~ni /minage:6 
    ')do echo move ..\%%n 
    popD 
) 
popD 
0

, 다음과 같은 코드를 시도 할 수 :

같은이 forfiles 명령을 사용하는 대신 robocopy에 의해 달성 될 수있다
@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "_ROOT=D:\" 
set "_SRC=files" 
set "_DST=archive" 
set /A "_AGE=7" 

for /D %%A in ("%_ROOT%\*") do (
    for /D %%B in ("%%~A\*") do (
     for /D %%C in ("%%~B\*") do (
      robocopy "%%~C\%_SRC%" "%%~C\%_SRC%\%_DST%" "*.*" /MOV /IS /MINAGE:%_AGE% 
     ) 
    ) 
) 

endlocal 
exit /B 

:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "_ROOT=D:\" 
set "_SRC=files" 
set "_DST=archive" 
set /A "_AGE=7" 

for /D %%A in ("%_ROOT%\*") do (
    for /D %%B in ("%%~A\*") do (
     for /D %%C in ("%%~B\*") do (
      forfiles /P "%%~C\%_SRC%" /M "*" /D -%_AGE% /C "cmd /C if @isdir==FALSE 2> nul mkdir 0x22%_DST%0x22 & move /Y @file 0x22%_DST%0x22" 
     ) 
    ) 
) 

endlocal 
exit /B