2017-03-08 1 views
-3

Alors, j'ai un grand arbre de fichier qui est quelque chose comme çadéplacer récursive dans des dossiers avec un script batch et déplacer des fichiers de plus de six jours dans un sous-dossier

\ foo \ foo1 \ foo \ files \ archives

\ foo \ foo2 \ foo \ files \ archives

\ foo \ foo3 \ foo \ files \ archive

\ foo \ foo4 \ foo \ files \ archive

mon objectif est d'être capable de loo p dans chacun des dossiers "\ files" et déplacez les fichiers dans ce dossier vers le dossier "\ archive" s'ils ont plus de 6 jours

Idéalement, un script .bat serait le meilleur. Je suis un vrai novice quand il s'agit de ce genre de choses et d'habitude il suffit d'utiliser robocopy pour effectuer ce genre de tâches mais comme la structure du fichier est si dense écrire plus de 50 lignes de code pour faire ça.

Je dois pouvoir explorer jusqu'à 16 dossiers contenant chacun 7 dossiers contenant les fichiers cibles et l'emplacement de l'archive, puis décider si les fichiers cibles ont dépassé l'âge maximum et les déplacer dans un sous-répertoire qui vit à l'intérieur de l'emplacement cible s'ils dépassent l'âge maximum.

+0

Je n'essaie pas de supprimer quoi que ce soit. Je dois pouvoir explorer en profondeur 16 dossiers contenant chacun 7 dossiers contenant les fichiers cibles et l'emplacement de l'archive, puis décider si les fichiers cibles dépassent l'âge maximum et les déplacer dans un sous-répertoire qui se trouve à l'intérieur de l'emplacement cible s'ils dépassent l'âge maximum. Désolé si je n'ai pas précisé cela. –

+2

Utilisez donc 'move' au lieu de' del'. – SomethingDark

+0

Si je devais le faire avec la commande 'target' et 'source' explicite. Comme je le ferais normalement en utilisant robocopy, je devrais écrire 112 lignes de code pour y parvenir. Si je ne trouve pas un autre moyen, je le ferai de cette façon, mais je suis sûr qu'il y a une meilleure façon de gérer cela. –

Répondre

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

Si je vous comprends bien, vous pouvez essayer le code suivant:

@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 

La même chose peut être obtenue en utilisant la commande forfiles au lieu de 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