Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
[RESOLU] Effacement du fichier le plus vieux
Auteur Message
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Bonjour,
J'essaie de me faire un batch qui me nettoierais un répertoire de vidéo surveillance.

On connait tous ces caméra low cost qui enregistre une séquence ou une image si il y a détection.
Le problème c'est que ça bourre un répertoire et le sature en taille.

Donc j'ai essayé de faire un batch qui me nettoyerais ce répertoire.
Il test la taille du répertoire indiqué et efface un le fichier le plus vieux si la taille du répertoire est plus grande que la taille indiqué dans le batch.

Code:
echo off
set $dossiure="d:\testbat\toto\"
set $taille=452892820
 
:recommence
echo "------------------------------------------------------------"
for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
  set $NbBytes=%%a
  Goto:fintaille)
exit /b
 
:fintaille
 
if %$NbBytes% GTR %taille% (
   for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
      set $LeVieux="%%a"
      Goto:finvieu)
   exit /b
 
   :finvieu
   del %dossiure%\%$LeVieux% /F /Q
   echo %$LeVieux% efface
   Goto:recommence)
 
   echo le dossier fait %$NbBytes%
   Goto:finbatch
exit /b
:finbatch


BUG:
1-Il ne détecte que la taille du répertoire d'où il est lancé malgré les indications.
2-La variable taille ne supporte pas des taille de 80Go exprimé en octets
3-Il aime pas faire des bons en arrière dans le code.
4-Celui qui l'a codé (moi) est un vrai manche.

Qui peut me donner un coup de paluche, svp?



Dernière édition par ChriGon le Dim 21 Déc 2014 - 02:30; édité 1 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Salut,
jette un oeil ici, depuis un for tu peux avoir la taille du fichier cible http://batch.xoo.it/t4314-Tuto-Les-substitutions-de-r-f-rences-de-variables…



Dernière édition par Hugo7 le Sam 20 Déc 2014 - 19:07; édité 1 fois

______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Voilà un code sur mesure ^^

Code:
@echo off

:: dossier avec les captures
set dossier="captures"
:: octets max : ici environ 80Mo
set octets_max=80000000

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: FOUND_OCTETS

:NEW_TEST

:: Initialisation des variables
set octets=0
set nbrfile=0
set big_file=0
set add_octet=0
set file_max_octets=0

for %%F in ("%dossier%\*.*") do (
FOR /D %%i IN ("%%F") DO (
set "file_analyse="%%F""
set add_octet=%%~zi
call :ADD_OCTET
)
)
goto FERIFY_OCTETS

:ADD_OCTET
set /a nbrfile+=1
set /a octets+=%add_octet%
if %add_octet% GTR %file_max_octets% (
set file_max_octets=%add_octet%
set "big_file=%file_analyse%"
)

cls
echo FICHIER  : %file_analyse% en cours d'analyse
Echo POIDS    : %add_octet% OCTETS
Echo FICHIERS : %nbrfile% fichiers analys‚s
Echo OCTETS   : %octets%/%octets_max% octets
goto :eof

:FERIFY_OCTETS
If %octets% GEQ %octets_max% goto SUPP_FILE
echo.
echo.
echo.
echo Plus de fichier volumineux … supprimer.
echo.
pause
exit

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: SUPP_FILE

:SUPP_FILE
echo.
echo.
echo.
echo Suppression des fichiers volumineux...
echo.
echo Suppression du fichier %big_file% (%file_max_octets% octets) en cours...
ping localhst -n 2 >nul
del %big_file%
goto NEW_TEST





______________________________________________________
Visiter le site web du posteur
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Skywalker a écrit:

Code:
%%~zi

Oui voilà c'est ce que je disais, mais toi tu dois vraiment t'ennuyer pour faire un code comme ça Laughing




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Non, l'entraide Laughing




______________________________________________________
Visiter le site web du posteur
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
merci beaucoup, il fonctionne tip top pour 80 mo.
Tu as fait un super boulot mais j'ai peur que mes propos casse l'ambiance.


Heuu... questions.

VERIFY_OCTETS est un mot réservé en batch car tu as mis FERIFY_OCTETS ?
(en allemand les v se prononce f, mais je ne sais pas parler allemand)


ping localhst -n 2 >nul
( je ne comprend pas pourquoi le ping et surtout sur soi-même, si on marque localhost)


Après une pré-simu la variable ne supporte pas une taille de 80 Go, 85'899'345'920



Si j'ai bien compris le script. Il additionne le poids de tout les fichiers et si ça dépasse, il efface le plus vieux?
Je sais que je suis un emmerdeur de compétition mais...
Le répertoire pourrait taper dans les ~4500 fichiers max.
d'un côté on peut le faire tourner sur plusieurs machines virtuel pour palier au temps d’exécution.
Mais j'ai un peu peur que le NAS me fasse une dépression nerveuse.

le "for /f "tokens=3 delims= " %%a in ('dir d:\testbat\toto\ ^| find /i "octets"') do (
set $NbBytes=%%a ", c'est pourri comme commande car tu ne veux pas l'utiliser?

Et pour couronner le tout, je dois travailler avec un net use.
je ne sais pas si ça passera plus tard les interrogation de fichiers et répertoires.

(Sachadee, il n'est pas brésilien?)
Skywalker, au plaisir de pouvoir te lire à nouveau.



Dernière édition par ChriGon le Sam 20 Déc 2014 - 23:32; édité 3 fois
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Au lieu de faire un DIR, je pense que c'est mieux de passer par FOR avec le lien que je t'ai droppé avant.




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
=>Hugo7
Je viens de pseudo-comprendre ton tuto.
Si ma synthèse est bonne, c'est pour mieux parser et récupérer les informations des fichiers?

Donc depuis ce postulat, je ne comprend pas :
-Ce qui empêche la variable de taille limite de d'exploser.
-Pourquoi le Goto:recommence fonctionnerais tout à coup.
bref


Afin que je comprenne, peux-tu m'expliquer ce que tu reproches à :
1) ce qui donne la taille du répertoire
Code:
for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
  set $NbBytes=%%a
  Goto:fintaille)
exit /b


2)ce qui donne le fichier le plus vieux
Code:
for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
      set $LeVieux="%%a"
      Goto:finvieu)
   exit /b


[le moins attribué est dû au faite d'une moquerie envers une personne(Skywalker) qui en aide une autre(ChriGon), c'est pas très éthique. Ref. : http://batch.xoo.it/t2-Le-premier-message-de-votre-forum.htm, point n°1 ]



Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Hugo7 a écrit:
Au lieu de faire un DIR, je pense que c'est mieux de passer par FOR avec le lien que je t'ai droppé avant.


Pourquoi ???????

Le dir est beaucoup, mais alors beaucoup plus rapide que d'additionner les poids de chaque fichier.

La solution du FOR OK pour des petits dossiers, mais pour des grosses structures et en boucle, c'est pas conseillé.

ChriGon tu travailles en stéréo ? : http://www.developpez.net/forums/d1483451/general-developpement/programmati…

ChriGon a écrit:
ping localhst -n 2 >nul
( je ne comprend pas pourquoi le ping et surtout sur soi-même, si on marque localhost)


Le ping est juste la pour temporiser le script (pas forcément nécessaire, mais conseillé pour éviter des surchauffes de processeur dans certain cas).


Donc d'après moi la solution la plus performante :

Code:

@echo off

set dossiure="c:\toto\test"
set "$max=80000000"

Echo traitement en cours....

:loop
for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
  set $NbBytes=%%a
  goto:test
)

:test

If %$NbBytes% GTR %$max% (
  for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
       set $LeVieux="%%a"
       Echo Destruction de : [%$LeVieux%]
       del %$LeVieux%
       goto:wait
   )
)

:wait
ping localhost -n 2
goto:loop


Wink

PS : J'habite au Brésil mais je ne suis pas (encore) Brésilien




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
sachadee a écrit:

Pourquoi ???????

Le dir est beaucoup, mais alors beaucoup plus rapide que d'additionner les poids de chaque fichier.

La solution du FOR OK pour des petits dossiers, mais pour des grosses structures et en boucle, c'est pas conseillé.

Tient je me disais aussi malgré mes piètre connaissance.


sachadee a écrit:

ChriGon tu travailles en stéréo ?

Oui, je suis de la vieille école. Il parait que les jeunes en sont au 7.1 surround. Rolling Eyes


sachadee a écrit:

Le ping est juste la pour temporiser le script (pas forcément nécessaire, mais conseillé pour éviter des surchauffes de processeur dans certain cas).

haaaa, je comprends mieux sa présence maintenant. Mais ton script tourne en permanence d'ou sont utilité. Je me suis permis de le terminer car je veux juste le lancer dans un planificateur des tâches. Donc, je pense que je peux un peu réduire le wait.

Je me suis permis de retoucher ton code qui est élégant, merci beaucoup:
Code:
@echo off

set dossiure=d:\testbat\toto\
set "$max=14700000000"

Echo traitement en cours....

:loop
for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
  set $NbBytes=%%a
  goto:test
)
:test

If %$NbBytes% GTR %$max% (
  for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
      set LeVieux="%dossiure%%%a"
       Echo Destruction de : [%LeVieux%]
       del %LeVieux%
       goto:wait
   )
)
goto:fin
:wait
ping localhost -n 1
goto:loop
:fin
echo fini

1) J'ai rajouté une fin, car je pense le lancer tout les 2 ou3 jours
2) diminué le wait
3) lui donné un chemin un peu plus absolue


mais là, j'ai une bizarrerie, il tourne un coup dans le vide à chaque tour de piste.
Code:
D:\testbat>sachadee.bat
traitement en cours....
Destruction de : []
La syntaxe de la commande n'est pas correcte.

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-03-57.avi"]

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-03-57.avi"]
Impossible de trouver d:\testbat\toto\BGGCam02_2013-06-29_14-03-57.avi

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-23-05.avi"]

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-23-05.avi"]
Impossible de trouver d:\testbat\toto\BGGCam02_2013-06-29_14-23-05.avi

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-57-45.avi"]

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-57-45.avi"]
Impossible de trouver d:\testbat\toto\BGGCam02_2013-06-29_14-57-45.avi

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-58-25.avi"]

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-58-25.avi"]
Impossible de trouver d:\testbat\toto\BGGCam02_2013-06-29_14-58-25.avi

Destruction de : ["d:\testbat\toto\BGGCam02_2013-06-29_14-59-07.avi"]

fini

D:\testbat>
J'ai omis les lignes de ping.

On peut voir que le premier tour est à "vide".
Ensuite il veut détruire un fichier et le tour d'après le même fichier.
Je planche dessus pour savoir pourquoi.



Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Bonjour

tu peux aussi voir du coté de la commande forfiles il peut effacer les fichiers plus vieux de x jours. Si mes souvenirs sont bons elle en native sous vista et win 7.
Voir ici pour l utilisation http://batch.xoo.it/t305-suppression-de-fichiers-vieux-de-plus-de-7-jours.h…




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
sachadee a écrit:

Pourquoi ???????

Par ce que je trouve que DIR est un peu pénible à faire (peut être que tu le trouve pas, mais chacun ses impressions), et que j'utiliserais plus facilement FOR que DIR dans les batchs en général x)
(il est jamais trop tard pour que je m'améliore) Laughing

Citation:
set dossiure="c:\toto\test"
...
in ('dir %dossiure% ^| find /i "octets"')

C'est pour avoir le poids du dossier non? FOR fonctionne aussi pour les dossiers.

Après si ta solution est plus rapide, je calcule pas la rapidité de mes batchs, en fait je me contente de ce qui me sort ce que j'attend Mr. Green


ChriGon a écrit:

Si ma synthèse est bonne, c'est pour mieux parser et récupérer les informations des fichiers?

Oui, et ça fonctionne également avec les dossiers.

Laddy a écrit:
Bonjour

tu peux aussi voir du coté de la commande forfiles il peut effacer les fichiers plus vieux de x jours. Si mes souvenirs sont bons elle en native sous vista et win 7.
Voir ici pour l utilisation http://batch.xoo.it/t305-suppression-de-fichiers-vieux-de-plus-de-7-jours.h…

Merci, il y a quelques jours je cherchais un truc dans ce genre Okay




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
ChriGon a écrit:

[le moins attribué est dû au faite d'une moquerie envers une personne(Skywalker) qui en aide une autre(ChriGon), c'est pas très éthique. Ref. : http://batch.xoo.it/t2-Le-premier-message-de-votre-forum.htm, point n°1 ]


Ne t'inquiète pas chrigon je ne n'ai pas mal pris, ce n'étais pas "méchant" Laughing

Sinon je code que j'ai fais, j'ai tester sur un dossier avec 1000 fichiers générer avec un batch donc il est pas adapte a un serveur je suppose ^^

@+ Okay




______________________________________________________
Visiter le site web du posteur
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Ah c'est de moi qu'il parlait en disant ça? Shocked
Code:
Point(s): 2  Évaluer: Plus - Moins

Comme le dit Sky, c'est pas méchant, et je disais pas ça pour me moquer, c'était plutôt un compliment, et si tu veux je reformule :

<<GG Sky de prendre le temps de faire un batch de 64 lignes pour aider quelqu'un malgré ton gros projet de Batchat 2.0!>>




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [RESOLU] Effacement du fichier le plus vieux 
Re,
bon le malentendu est dissipé entre Skywalker et Hugo7, malheureusement je ne trouve pas moyen de ré-attribuer le point.
Faudra juste faire passer ça dans les dommages collatéraux.

Quand au batch:
1-A ce que j'ai lu, le "for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od')" donne toujours une première ligne vide à ce que j'ai lu. Bon bin on fera avec vu que ça n'altère pas la fonctionnalité. Ce n'est pas très élégant mais une contremesure barbare nuirait à la lisibilité du code.

2-Quand à la répétition, j'essaie toujours de comprendre pourquoi. Dès que je trouve des infos, j'en fait part ici.



Dernière édition par ChriGon le Lun 22 Déc 2014 - 09:25; édité 2 fois
Message [RESOLU] Effacement du fichier le plus vieux 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch