Batch Supprimer un fichier vieux de X heures [Fermé]

Signaler
Messages postés
3
Date d'inscription
vendredi 22 juin 2018
Statut
Membre
Dernière intervention
22 juin 2018
-
Messages postés
13372
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 avril 2021
-
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

Messages postés
31497
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 avril 2021
7 539
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
Messages postés
3
Date d'inscription
vendredi 22 juin 2018
Statut
Membre
Dernière intervention
22 juin 2018

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
Messages postés
3
Date d'inscription
vendredi 22 juin 2018
Statut
Membre
Dernière intervention
22 juin 2018

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
Messages postés
13372
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 avril 2021
4 280
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



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”

Bonjour ça a marché pour vous ? car pour moi ça ne marche pas !
Messages postés
13372
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
9 avril 2021
4 280 > 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 ?