递归通过文件夹用批处理脚本移动和移动六天旧文件到子文件夹

问题描述:

所以,我有一个很大的文件树是这样的递归通过文件夹用批处理脚本移动和移动六天旧文件到子文件夹

\富\ foo1 \富\文件\档案

\富\ foo2的\富\文件\档案

\富\ foo3 \富\文件\档案

\富\ foo4 \富\文件\档案

我的目标是成为能够厕所p到每个“\ files”文件夹中,并将该文件夹中的文件移动到“\ archive”文件夹(如果它们大于6天以前)

理想情况下,.bat脚本应该是最好的。当谈到这种东西时,我是一个真正的新手,通常只是使用robocopy来执行这些任务,但由于文件结构非常密集,因此写50行以上的代码似乎很漫长。

我需要能够深入到16个文件夹,每个文件夹包含另外7个文件夹,其中包含目标文件和存档位置,然后确定目标文件是否超过最大时间并将它们移动到一个子目录中如果目标位置超过最大年龄,则位于目标位置内。

+0

我不想删除任何东西。我需要能够深入查看16个文件夹,每个文件夹包含另外7个包含目标文件和归档位置的文件夹,然后确定目标文件是否超过最大时间并将它们移动到位于目标位置内的子目录中如果他们超过最大年龄。对不起,如果我没有说清楚。 –

+2

所以使用'移动'而不是'del'。 – SomethingDark

+0

如果我要这样做,并明确的'目标'和'来源'命令。就像我通常使用robocopy一样,我需要编写112行代码来实现这一点。如果我找不到另一种方式,我会这样做,但我相信有一个更好的方法来处理这个问题。 –

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 

如果我理解你的权利,你可以试试下面的代码片段:

@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 

同样可以使用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 (
      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