2017-03-08 129 views
-3

所以,我有一個很大的文件樹是這樣的遞歸通過文件夾用批處理腳本移動和移動六天舊文件到子文件夾

\富\ foo1 \富\文件\檔案

\富\ foo2的\富\文件\檔案

\富\ foo3 \富\文件\檔案

\富\ foo4 \富\文件\檔案

我的目標是成爲能夠廁所p到每個「\ files」文件夾中,並將該文件夾中的文件移動到「\ archive」文件夾(如果它們大於6天以前)

理想情況下,.bat腳本應該是最好的。當談到這種東西時,我是一個真正的新手,通常只是使用robocopy來執行這些任務,但由於文件結構非常密集,因此寫50行以上的代碼似乎很漫長。

我需要能夠深入到16個文件夾,每個文件夾包含另外7個文件夾,其中包含目標文件和存檔位置,然後確定目標文件是否超過最大時間並將它們移動到一個子目錄中如果目標位置超過最大年齡,則位於目標位置內。

+0

我不想刪除任何東西。我需要能夠深入查看16個文件夾,每個文件夾包含另外7個包含目標文件和歸檔位置的文件夾,然後確定目標文件是否超過最大時間並將它們移動到位於目標位置內的子目錄中如果他們超過最大年齡。對不起,如果我沒有說清楚。 –

+2

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

+0

如果我要這樣做,並明確的'目標'和'來源'命令。就像我通常使用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

如果我理解你的權利,你可以試試下面的代碼片段:

@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 
相關問題