Batch Supprimer un fichier vieux de X heures

Sulyvan77 Messages postés 3 Statut Membre -  
brucine Messages postés 24813 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Etant actuellement en stage dans une grande entreprise, il m'a été demander de réaliser un script en Batch ou VB pour supprimer des fichiers temporaire mais selemement les fichiers vieux de plus de 3 heures.
Je ne suis vraiment pas expert en script, je découvre.
Voici le code trouvé sur internet que j'ai tenté de modifié sans résultat avec un message d'erreur.
@echo off

set fich=C:\Users\paje01\Desktop\TEST\test1
set jour=3

pause
forfiles -p %fich% -s -m *.* -d -3-c "cmd /c del @FILE"

pause
@exit


J'obtient alors le message d'erreur suivant :

Appuyez sur une touche pour continuer...
Erreur : Argument ou option non valide - « cmd /c del @FILE ».
Entrez "FORFILES /?" pour afficher la syntaxe.
Appuyez sur une touche pour continuer...


Voila, si quelqu'un a une solution a m'apporter :)
Merci et bonne journée,

4 réponses

  1. jee pee Messages postés 31878 Date d'inscription   Statut Modérateur Dernière intervention   9 977
     
    Bonjour,

    Dans ta commande il manque un espace entre
    -3 -c
     

    Par contre cette commande traite les jours, pas les heures. Il faudrait que tu cherches un autre script.

    cdlt
    0
  2. Sulyvan77 Messages postés 3 Statut Membre
     
    Bonjour et merci de ta réponse,

    Après recherche j'ai reussi a faire un script fonctionel pour les jours mais pour les heures je susi toujours en recherche avec pas mal de galère, voici mon test :

         
    @ECHO OFF
    REM DEBUT DU SCRIPT

    REM AFFICHAGE HEURE ETS MINUTES

    for /f "tokens=1,2,3 delims=:" %%a in ('time /t') do set heure=%%a
    for /f "tokens=1,2,3delims=:" %%a in ('time /t') do set minute=%%b
    echo Heure : %heure%
    echo Minute : %minute%

    REM ///////CREATION DOSSIER CONTENANT HEURES ET MINUTES

    REM ///////echo Test > fichier_%heure%%minute%.txt

    pause

    REM VARIABLES TEMPS ET DOSSIERS
    REM REPERTOIRE CONTENANT NOS FICHIERS
    SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1

    REM NOMBRE DE JOUR DE CONSERVATION MAXIMUM
    SET HMAX=%time~0,2%

    pause

    REM SUPPRIME LES FICHIERS
    forfiles /P %REPDOSS% /m *.* /D -%HMAX% /C "cmd /c del /q @path"

    pause
    REM ///// TEST
    REM /////ForFiles /P "%REPDOSS%" /D -%JOURMAXS% /C "CMD /C if @ISDIR==TRUE echo RD /Q /S @FILE &RD /Q /S @path"

    REM AFFICHER UN MESSAGE APRES LA SUPRESSION

    echo Msgbox "Le script a bien ete execute et vos fichiers sont supprimes."
    pause
    0
  3. Sulyvan77 Messages postés 3 Statut Membre
     
    Et voici celui qui fonctionne,

     @ECHO OFF REM DEBUT  DU SCRIPT 

    REM VARIABLES TEMPS ET DOSSIERS
    REM REPERTOIRE CONTENANT NOS FICHIERS
    SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1
    REM NOMBRE DE JOUR DE CONSERVATION MAXIMUM
    SET JOURMAX=1

    REM SUPPRIME LES FICHIERS
    forfiles /P %REPDOSS% /m *.* /D -%JOURMAX% /C "cmd /c del /q @path"
    pause

    REM SUPPRIMER LES DOSSIERS
    REM ForFiles /P "%REPDOSS%" /D -%JOURMAXS% /C "CMD /C if @ISDIR==TRUE echo RD /Q /S @FILE &RD /Q /S @path"

    PAUSE
    0
  4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    J'ai repris ton code pour éliminer les fichiers/dossiers plus vieux que 1 jour, ensuite j'ai crée le code pour supprimer ceux plus vieux que 3 heures :

    @echo off
    setlocal enableextensions enabledelayedexpansion
    chcp 1252 >nul

    REM REPERTOIRE CONTENANT NOS FICHIERS
    SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1

    REM NOMBRE DE JOUR DE CONSERVATION MAXIMUM
    SET JOURMAX=1

    cd /d %REPDOSS% || exit /b 1

    REM SUPPRIME LES FICHIERS
    forfiles /D -%JOURMAX% /C "cmd /c if @ISDIR==FALSE (del /f /q @file)"

    REM SUPPRIMER LES DOSSIERS
    forfiles /D -%JOURMAX% /C "cmd /c if @ISDIR==TRUE (rd /Q /S @file)"

    PAUSE

    :: RECUPERER L'HEURE ACTUELLE ET LA TRANSFORMER EN MINUTES
    for /f "tokens=1,2,3 delims=:" %%a in ('time /t') do (
    set H_actuelle=%%a
    set M_actuelle=%%b

    if !H_actuelle! LSS 10 (set H_actuelle=!H_actuelle:~-1!)
    if !M_actuelle! LSS 10 (set M_actuelle=!M_actuelle:~-1!)

    set /a total_actuelle=!H_actuelle!*60+!M_actuelle!
    )

    pause

    :: LISTER LES FICHIERS ET DOSSIERS
    for /f "delims=" %%K in ('dir /b') do (

    :: RECUPERER L'HEURE POUR CHAQUE FICHIER/DOSSIER
    for /f "skip=5 tokens=1,2,3,* delims=: " %%A in ('2^>nul dir "%%~K" ^| findstr /v "octets"') do (
    set heure=%%B
    set minute=%%C

    :: TRANSFORMER L'HEURE EN MINUTES
    if !heure! LSS 10 (set heure=!heure:~-1!)
    if !minute! LSS 10 (set minute=!minute:~-1!)

    set /a total_fichier=!heure!*60+!minute!

    :: DETERMINER L'ECART ET SUPPRIMER LES FICHIERS/DOSSIERS TROP VIEUX
    set /a ecart=!total_actuelle!-!total_fichier!

    if !ecart! GTR 180 (2>nul rd /s /q "%%~K" || del /f "%%~K")
    if !ecart! LSS -1440 (2>nul rd /s /q "%%~K" || del /f "%%~K")
    if !ecart! LSS 0 (if !ecart! GTR -1260 (2>nul rd /s /q "%%~K" || del /f "%%~K"))
    )
    )
    pause

    exit /b 0


    0
    1. barbabe0057
       
      Bonjour ça a marché pour vous ? car pour moi ça ne marche pas !
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930 > barbabe0057
         
        Bonjour,

        Si vous voulez de l'aide il faut décrire précisément votre problème, il ne suffit pas de dire ça ne marche pas.

        Quelle partie du script ne fonctionne pas ? La 1ère partie qui efface les dossiers/fichiers plus vieux que 1 jour ou bien la deuxième partie qui efface les fichiers/dossiers vieux de plus de 3 heures ?

        Est-ce que votre problème concerne les fichiers ou bien les dossiers ou bien les 2 ?
        0
      2. Ludo777 > barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention  
         

        Bonjour,

        Chez moi cela m'efface tous les fichiers et m'indique dans l'invite de commande "opérateur manquant" 

        Avez vous une idée ?

        Sinon la commande forfiles pour 1 jour cela marche nikel, quel dommage que l'on ne puisse pas faire moins d'un jour.

        0
      3. brucine Messages postés 24813 Date d'inscription   Statut Membre Dernière intervention   4 166 > Ludo777
         

        Bonjour,

        C'est sûrement que tu as mal recopié la formule de barnane0057 à qui je fais toute confiance à cet égard.

        Noter que le Batch Dos gère très mal tout ce qui est dates, il existe une foule de contournements, le plus simple sans utilitaire tiers via PowerShell:

        https://stackoverflow.com/questions/74026069/how-to-delete-all-files-last-modified-more-than-5-minutes-ago

        0