Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Supprimer des fichiers précis, selon la date
Auteur Message
Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Bonjour, je souhaiterai, comme indiqué dans le titre, supprimer des fichiers précis en fonction du nom d'un dossier et de la date du système, j'ai le début de mon programme ci dessous, et à la fin, il y a en gros ce que j'aimerai faire, j'ai cherché pas mal et je commence à me débrouiller, mais j'ai pas forcément trouvé ce que je veux sur internet... Mon code est intégralement commenté au cas ou.

Sous windows, en fichier batch .bat

Si vous pourriez m'aider ce serait super cool ! Merci à vous Smile

Code:


::N'affiche pas les commandes dans le CMD
@echo off
::Repertoire où ls commandes vont s'effectuer
cd C:\FTP
::Renomme backup.conf avec la date du système au format JJ.MM.AAAA
ren "backup.conf" "%DATE:~0,2%.%DATE:~3,2%.%DATE:~6,4%.conf"
::Donne à la variable file_ext, la valeur *.conf
set file_ext="*.conf"
::donne à la variable mois, le mois actuel du systeme
set mois=%DATE:~3,2%


::Pour les fichiers qui ont l'extension .conf, faire :
For %%a in (%file_ext%) do (
::Séparer en 3 le nom des fichiers, chaque bloc est séparé par le caractère ".",
For /f "tokens=1-3 delims=." %%b in ("%%a") do (
::La variable date, prends la valeur de la 2e partie %%c, du nom du fichier (06, pour le mois de juin par exemple)
       set date=%%c   
::Si le dossier du mois actuel correspondant au nom du fichier n'existe pas, alors on le créer
      If not exist "C:\FTP\%%c" (mkdir "C:\FTP\%%c")   
::Deplacer le fichier .conf dans le dossier en question
      Move /Y "%%a" "%%c\%%a" >nul
   
))
       pause
   ::   Ce programme, renomme un fichier backup.conf avec la date actuelle du système, et le place dans un dossier qui se nomme par le mois actuel du système (Jusqu'ici, il fonctionne très bien).
   
   ::   Je souhaiterai idéalement que :
   :: → Quand le dossier %%c, est égal à date du systeme -1, supprimer tout les fichiers .conf dans le dossier %%c et laisser le dernier.
   
   
   
   :: → Pour éclaircir le truc avec un exemple : Le dossier 06(mois de juin) comporte 5 fichiers .conf.
        :: → quand je passe en 07(juillet), il supprime 01.06.2018.conf, 08.06.2018.conf, 15.06.2018.conf, 22.06.2018.conf et laisse impérativement 29.06.2018.conf






Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Comme ça :

Code:
@echo off
setlocal enabledelayedexpansion
 
 
cd C:\FTP
call :getDate
echo;Current Date: %Day%.%Month%.%Year%
if exist "backup.conf" (
  ren "backup.conf" "%Day%.%Month%.%Year%.conf"
  echo;"backup.conf" Rename Into "%Day%.%Month%.%Year%.conf"
) else (
  echo;"backup.conf" doesn't exist^^!
  set /p ".=Press any key to continue.."<nul
  pause>nul
)
set file_ext=*.conf
 
 
for %%a in ("%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%a") do (
  set MonthFile=%%c
  if not exist "%%c" (mkdir "%%c"&echo;Folder "%%c" is Created^^!) 
  move /Y "%%a" "%%c\%%a" >nul
  echo;"%%a" is Moved in "%%c\%%a"
)
 
 
set /a MonthTemp=10000%Month% %% 10000
if %MonthTemp% gtr 0 (
  set /a PreviousMonth=%MonthTemp%-1
  call :leadingZero PreviousMonth
  echo;Check Last Month:!PreviousMonth!
  if exist !PreviousMonth!\nul (
   echo;  - !PreviousMonth!\ Exist^^!
   set last=
   set nlast=
    for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
    set /a nb=10000%%b %% 10000
     if !nb! gtr !last! (set last=%%b&set nlast=%%a)
   )
   echo;  - "!nlast!" is the Last
   for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
     if not "%%b"=="!last!" (
       del /q "%%a" >nul 2>&1
      echo;  - "%%a" is Delete^^!
     )
   )
  )
)
 
 
 
pause>nul&exit
:getDate
  for /f "tokens=1,2 delims==" %%1 in ('WMIC Path Win32_LocalTime Get Year^,Month^,Day /Value') do (
    set /a n=%%2 >nul 2>&1 && (
     set %%~1=%%~2
     call :leadingZero %%~1
   )
  )
Exit /b
:leadingZero <VarName>
  set /a %~1=!%~1!+0
  if !%~1! leq 9 set %~1=0!%~1!
Exit /b




Dernière édition par Flammrock le Lun 25 Juin 2018 - 20:11; édité 2 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Salut, merci beaucoup pour ta réponse et le code !!
Il fait globalement ce que je veux, mais il semble y avoir une erreur quand j'essaye avec cette date, il ne supprime pas les fichiers précédents et indique une erreur, une idée ? Parce que j'ai essayé de fouiner dans ton code mais je comprends pas tout à fait ^^'





Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Petite erreur de ma part désolé ^^

Le problème vient des "leading zero", des zeros avant le nombre ici le mois d'Aout par exemple s'écrit 08 et pas 8
Le problème est qu'avec le commutateur /a de la commande set il interprète les nombres avec des "leading zero" comme des nombres octaux
d'où l'erreur, le code fonctionne jusqu'au mois de Juin (07), la valeur 08 n'existe pas en octal

Pour résoudre le problème j'applique un modulo 10000 sur 10000%Month% le reste est bien %Month% (ce qui enlève le zéro)
p.s : j'ai corrigé mon message précédent

et je remet le code ici :

Code:
@echo off
setlocal enabledelayedexpansion
 
 
cd C:\FTP
call :getDate
echo;Current Date: %Day%.%Month%.%Year%
if exist "backup.conf" (
  ren "backup.conf" "%Day%.%Month%.%Year%.conf"
  echo;"backup.conf" Rename Into "%Day%.%Month%.%Year%.conf"
) else (
  echo;"backup.conf" doesn't exist^^!
  set /p ".=Press any key to continue.."<nul
  pause>nul
)
set file_ext=*.conf
 
 
for %%a in ("%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%a") do (
  set MonthFile=%%c
  if not exist "%%c" (mkdir "%%c"&echo;Folder "%%c" is Created^^!) 
  move /Y "%%a" "%%c\%%a" >nul
  echo;"%%a" is Moved in "%%c\%%a"
)
 
 
set /a MonthTemp=10000%Month% %% 10000
if %MonthTemp% gtr 0 (
  set /a PreviousMonth=%MonthTemp%-1
  call :leadingZero PreviousMonth
  echo;Check Last Month:!PreviousMonth!
  if exist !PreviousMonth!\nul (
   echo;  - !PreviousMonth!\ Exist^^!
   set last=
   set nlast=
    for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
    set /a nb=10000%%b %% 10000
     if !nb! gtr !last! (set last=%%b&set nlast=%%a)
   )
   echo;  - "!nlast!" is the Last
   for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
     if not "%%b"=="!last!" (
       del /q "%%a" >nul 2>&1
      echo;  - "%%a" is Delete^^!
     )
   )
  )
)
 
 
 
pause>nul&exit
:getDate
  for /f "tokens=1,2 delims==" %%1 in ('WMIC Path Win32_LocalTime Get Year^,Month^,Day /Value') do (
    set /a n=%%2 >nul 2>&1 && (
     set %%~1=%%~2
     call :leadingZero %%~1
   )
  )
Exit /b
:leadingZero <VarName>
  set /a %~1=!%~1!+0
  if !%~1! leq 9 set %~1=0!%~1!
Exit /b




Dernière édition par Flammrock le Lun 25 Juin 2018 - 20:11; édité 1 fois

______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Salut,

Si on est en janvier, ton script ne donnera pas décembre en moi précédent.
Tel quel, tes comparaisons se feront aussi en octal.
Plus une certaine compléxité inutile.
Pas très très propre tout ça.

Embarassed

Oh le jay est chambreur aujourd'hui Laughing



Répondre en citant
Message Supprimer des fichiers précis, selon la date 
jay a écrit:
Tel quel, tes comparaisons se feront aussi en octal.

corrigé Embarassed


jay a écrit:
Si on est en janvier, ton script ne donnera pas décembre en moi précédent.

Oui je sais, c'est fait exprès parce que je sais pas trop comment il a organisé la gestion de changement d'année


jay a écrit:
Plus une certaine complexité inutile.

Laquelle ?


jay a écrit:
Pas très très propre tout ça.

Peut être mais le code marche à merveille (maintenant xD) Mr. Green Okay




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message Supprimer des fichiers précis, selon la date 
MOI J AURAI FAIT PLUS SIMPLE COMPARAISON DE DATE SI DATE PAS DU JOUR JE SUPPRIME SE QUI EST DANS LE DOSSIER POUR METTRE CEUX DU JOUR COMME SA PAS A GERER LES CHANGEMENT D ANNEE ET J AURAI PRIE LA DATE DONNER PAR L OS COMME SA PAS DE PROBLEME DE ZERO OU AUTRE C EST LA DATE DONNER PAR WINDOWS



Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Flammrock a écrit:
jay a écrit:
Plus une certaine complexité inutile.
Flammrock a écrit:
Laquelle ?


trop, beaucoup trop de "for %%a in () do for"



Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Merci bcp pour la correction, j'ai donc fini le code pour ça, donc a la fin de l'année le 31.12.AAAA, le programme supprime tout les autres mois de l'année et garde seulement le 12è qui correspond à la seule sauvegarde de l'année quand on est sur le point de passer à l'année précédente, il est plein plein d’imperfections, mais à mon niveau c'est déjà bien :/
Simple truc, je comprends pas bien la partie du code dans mon programme qui n'est pas commentée (que tu as rédigée) tu peux m'aider à comprendre le mécanisme stp ? Merci bcp !!

Code:


rem cache les commandes affichées dans le programme
@echo off
rem active l'expansion retardée des variables d'environnement
setlocal enabledelayedexpansion





rem affecte la valeur 0 a la variable count
set count=0
rem affecte la valeur du jour actuel à la variable jour
set jour=%DATE:~0,2%
rem affecte la valeur du mois actuel à la variable mois
set mois=%DATE:~3,2%
rem affecte la valeur de l'annee actuelle à la variable annee
set annee=%DATE:~6,4%




rem renomme le dossier "12" en l'année actuelle
cd C:\FTP
rem lance la boucle :getDate
call :getDate
rem note la date actuelle au format JJ.MM.AAAA
echo;Current Date: %Day%.%Month%.%Year%
rem si backup.conf existe,
if exist "backup.conf" (
rem renomme backup.conf par la date actuelle du systeme au format JJ.MM.AAAA.conf
  ren "backup.conf" "%Day%.%Month%.%Year%.conf"
  rem note note que backup.conf a bien été renommé par la date actuelle du systeme au format JJ.MM.AAAA.conf
  echo;"backup.conf" Rename Into "%Day%.%Month%.%Year%.conf"
  rem sinon,
) else (
rem note que backup.conf n'existe pas
  echo;"backup.conf" doesn't exist^^!
  rem il faut appuyer sur une touche pour continuer
 set /p ".=Press a key to continue..."<nul
 pause>nul
)
rem incrémente *.conf dans la variable file_ext
set file_ext=*.conf

rem les fichiers qui se finissent par .conf, entrent dans la variable %%a. On délimite en 3 blocks le nom, séparés par des points. %%b = jour, %%c = mois, %%d = année
for %%a in ("%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%a") do (
rem le mois de l'année entre dans la variable MonthFile
  set MonthFile=%%c
rem si le dossier qui porte le numéro du mois correspondant à celui du fichier .conf n'existe pas, on le crée
  if not exist "%%c" (mkdir "%%c"&echo;Folder "%%c" is Created^^!) 
 rem on deplace le fichier .conf (%%a) dans le dossier du mois actuel (%%c) sans afficher la commande à l 'écran
  move /Y "%%a" "%%c\%%a" >nul
  rem note que le fichier .conf (%%a) a bien été déplacé dans le dossier du mois actuel (%%c) sans afficher la commande à l 'écran
  echo;"%%a" is Moved in "%%c\%%a"
)
 
 
set /a MonthTemp=10000%Month% %% 10000
rem si monthtemp est superieur à 0,
if %MonthTemp% gtr 0 (
rem mettre dans la variable numérique PréviousMonth, la valeur monthtemps -1
  set /a PreviousMonth=%MonthTemp%-1
  rem lance la boucle :leadingzero
  call :leadingZero PreviousMonth
  rem saute une ligne
  echo.
  rem note le mois précedent
  echo;Check Last Month:!PreviousMonth!
  rem si le dossier qui a le nom du mois précédent existe
  if exist !PreviousMonth!\nul (
  rem on note qu'il existe
   echo;  - !PreviousMonth!\ Exist^^!
   set last=
   set nlast=
    for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
    set /a nb=10000%%b %% 10000
     if !nb! gtr !last! (set last=%%b&set nlast=%%a)
   )
   echo;  - "!nlast!" is the Last
   for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
     if not "%%b"=="!last!" (
       del /q "%%a" >nul 2>&1
      echo;  - "%%a" is Delete^^!
     )
   )
  )
)
rem si jour est égal à 31,
if %jour%==31  (
rem lance la boucle :12
call :12
rem sinon
) else (
rem lance la boucle :imp
call :imp)
rem il faut appuyer sur une touche pour continuer (>nul = on ne voit pas le message qui nous dit d'appuyer pour continuer) puis ferme le programme
pause>nul&exit





:getDate
  for /f "tokens=1,2 delims==" %%1 in ('WMIC Path Win32_LocalTime Get Year^,Month^,Day /Value') do (
    set /a n=%%2 >nul 2>&1 && (
     set %%~1=%%~2
    rem lance la boucle :leadingZero
     call :leadingZero %%~1
   )
  )
  rem quitte
Exit /b






:leadingZero <VarName>
  set /a %~1=!%~1!+0
  if !%~1! leq 9 set %~1=0!%~1!
Exit /b







rem boucle :12
:12
rem si la variable mois est égale à 12,
if %mois%==12  (
rem lancer la boucle :boucle
call :boucle
rem sinon
) else (
rem lancer la boucle :imp
call :imp)






rem Boucle :boucle
:boucle
rem efface le contenu de la fenetre
cls
rem ajoute +1 à la variable "count" (/a défini la variable en tant que variable numérique)
set /a count = %count% + 1
rem Si "count" est égal à 11, lancer la boucle :fin
if %count% == 11 (call :fin)
rem saute une ligne
echo.
rem note que les fichiers sont en train d'etre supprimés
echo Files are being deleted, wait...
rem saute une ligne
echo.
rem supprime le repertoire, sans demander confirmation C:\FTP\0%count%
rmdir /s /q C:\FTP\0%count%
rem la commande ping en commentaire, peut servir a laisser un temps d'attente entre chaque suppression des fichiers en cas du dysfonctionnement du programme
::ping -n 2 localhost > nul
rem si count est égal à 9, supprime le repertoire, sans demander confirmation C:\FTP\10
if %count%==9 rmdir /s /q C:\FTP\10
rem si count est égal à 9, supprime le repertoire, sans demander confirmation C:\FTP\11
if %count%==10 rmdir /s /q C:\FTP\11
rem laisse un temps d'attente avant de lancer la suite du programme
ping -n 1 localhost > nul
rem relance la boucle :boucle
goto boucle






rem boucle :imp
:imp
rem saute une ligne
echo.
rem note que les fichiers de l'année n'ont pas été supprimés
echo The files of the year have not been deleted.
rem note qu'il faut appuyer sur une touche pour continuer
echo Press a key to continue...
rem il faut appuyer sur une touche pour continuer (>nul = on ne voit pas le message qui nous dit d'appuyer pour continuer)
pause > nul
rem quitte le programme
exit







rem Boucle :fin
:fin
rem efface le contenu de la fenetre
cls
rem met la couleur vert clair
color a
rem saute une ligne
echo.
rem note que les fichiers ont bien été supprimés
echo Files were successfully deleted
rem saute une ligne
echo.
rem le programme travaille dans le repertoire C:\FTP
cd C:\FTP
rem renomme le dossier "12" en l'année actuelle
ren "12" "%DATE:~6,4%"
rem note que le dossier 12 de l'année a bien été renommé par l'année actuelle
echo File "12" of the year %DATE:~6,4% has been renamed "%DATE:~6,4%"!
rem saute une ligne
echo.
rem il faut appuyer sur une touche pour continuer (>nul = on ne voit pas le message qui nous dit d'appuyer pour continuer)
pause > nul
rem quitte le programme
exit






Répondre en citant
Message pour la réponse précédente 
pour les lignes 74 a 85 et 121 a 124 !!



Répondre en citant
Message Supprimer des fichiers précis, selon la date 
Voilà :

Code:
@rem cache les commandes affichées dans le programme
@echo off
rem active l'expansion retardée des variables d'environnement
setlocal enabledelayedexpansion
 
 
 
 
 

rem on recupère la date actuelle sans ce soucier du format
rem de la date du système qui peut être en jj-mm-AAAA ou en mm-jj-AAAA (ou autres)
rem elle met le jour dans %Day%, le mois dans %Month% et l'année dans %Year%
call :getDate

 
rem on se place dans le disque C
C:
rem on va dans C:\FTP
cd C:\FTP


rem note la date actuelle au format JJ.MM.AAAA
echo;Current Date: %Day%.%Month%.%Year%
rem si backup.conf existe,
if exist "backup.conf" (
  rem renomme backup.conf par la date actuelle du systeme au format JJ.MM.AAAA.conf
  ren "backup.conf" "%Day%.%Month%.%Year%.conf"
  rem note note que backup.conf a bien été renommé par la date actuelle du systeme au format JJ.MM.AAAA.conf
  echo;"backup.conf" Rename Into "%Day%.%Month%.%Year%.conf"
  rem sinon,
) else (
  rem note que backup.conf n'existe pas
  echo;"backup.conf" doesn't exist^^!
  rem il faut appuyer sur une touche pour continuer
  set /p ".=Press a key to continue..."<nul
  pause>nul
)
rem incrémente *.conf dans la variable file_ext
set file_ext=*.conf
 
rem les fichiers qui se finissent par .conf, entrent dans la variable %%a. On délimite en 3 blocks le nom, séparés par des points. %%b = jour, %%c = mois, %%d = année
for %%a in ("%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%a") do (
  rem le mois de l'année entre dans la variable MonthFile
  set MonthFile=%%c
  rem si le dossier qui porte le numéro du mois correspondant à celui du fichier .conf n'existe pas, on le créé
  if not exist "%%c" (mkdir "%%c"&echo;Folder "%%c" is Created^^!) 
  rem on deplace le fichier .conf (%%a) dans le dossier du mois actuel (%%c) sans afficher la commande à l 'écran
  move /Y "%%a" "%%c\%%a" >nul
  rem note que le fichier .conf (%%a) a bien été déplacé dans le dossier du mois actuel (%%c) sans afficher la commande à l 'écran
  echo;"%%a" is Moved in "%%c\%%a"
)
 
rem on enlève les "leading zeros"
set /a MonthTemp=10000%Month% %% 10000
rem si monthtemp est superieur à 0,
if %MonthTemp% gtr 0 (
  rem mettre dans la variable numérique PréviousMonth, la valeur monthtemps -1
  set /a PreviousMonth=%MonthTemp%-1
  rem on ajoute des leading zero si besoin pour obtenir 08 au lieu de 8 par exemple
  call :leadingZero PreviousMonth
  rem saute une ligne
  echo.
  rem note le mois précedent
  echo;Check Last Month:!PreviousMonth!
 
  rem si le dossier qui a le nom du mois précédent existe
  rem de plus avec le \nul on vérifie bien qu'il s'agisse bien d'un dossier et non d'un fichier
  if exist !PreviousMonth!\nul (
    rem on note qu'il existe
    echo;  - !PreviousMonth!\ Exist^^!
    set last=
    set nlast=
   rem on cherche le fichier le plus ancien à partir de son nom
    for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
     rem on enlève les leading zero pour ne pas faire des comparaisons en octal et on met le tout dans !nb!
     rem ici %%b correspond au jour du fichier
      set /a nb=10000%%b %% 10000
     rem ici !last! correspond au jour le plus ancien trouver
     rem si le jour !nb! est supérieur à !last! alors !last! n'est pas le plus ancien
     rem on remplace donc !last! par le jour !nb! et on met le nom du fichier dans !nlast!
      if !nb! gtr !last! (set last=%%b&set nlast=%%a)
    )
   rem on note que le fichier "!nlast!" est le plus ancien soit le dernier fichier qui ne doit surtout pas être supprimé
    echo;  - "!nlast!" is the Last
   rem on fait une boucle des fichiers
    for %%a in ("!PreviousMonth!\%file_ext%") do for /f "tokens=1-3 delims=." %%b in ("%%~nxa") do (
     rem si le jour %%b n'est pas égal à !last! alors il ne s'agit pas du dernier fichier on peut donc le supprimé
      if not "%%b"=="!last!" (
       rem on supprime le fichier sans afficher la commande
        del /q "%%a" >nul 2>&1
      rem on note que le fichier a bien été supprimé
        echo;  - "%%a" is Delete^^!
      )
    )
  )
)



rem si c'est le dernier jour de l'année
if "%Day%%Month%"=="3112" (
  echo;
  echo;
  echo;
  rem on note que c'est le 31 décembre
  echo;it's December 31st^^!
  echo;Change year in progress...
  rem il faut appuyer sur une touche pour continuer
  set /p ".=Press a key to continue..."<nul
  pause>nul
  echo;
 
  if not exist 12\nul (
    echo;Error:the Folder 12 does not exist^^!
   rem il faut appuyer sur une touche pour continuer
   set /p ".=Press a key to continue..."<nul
    pause>nul
    echo;
  )
 
  rem on supprime tout les dossiers correspondant au mois de Janvier (01) jusqu'au mois de novembre (11)
  for /l %%m in (1,1,11) do (
    rem on met le nombre actuel %%m dans CurrentMonth
    set CurrentMonth=%%m
   rem on ajoute des leading zero pour avoir par exemple 08 au lieu de 8
   call :leadingZero CurrentMonth
   rem on vérifie le dossier "!CurrentMonth!" exsite bien
   if exist !CurrentMonth!\nul (
     rem s'il existe on le supprime sans demander la permission
     rmdir /s /q "!CurrentMonth!" && (
       rem s'il est bien supprimer on note qu'il a été supprimé
       echo;   - "!CurrentMonth!" is Delete^^!
     ) || (
       rem il y a eu une erreur lors de la suppression, le dossier "!CurrentMonth!" n'a pas été supprimé
      rem on note qu'il y a eu une erreur
       echo;   - ERROR deleting "!CurrentMonth!" ^^!
      rem on demande d'appuyer sur une touche pour continuer
      set /p ".=Press a key to continue..."<nul
        pause>nul
     )
   ) else (
     rem le dossier "!CurrentMonth!" n'existe pas
     rem on note qu'il n'existe pas
     echo;   - "!CurrentMonth!" does not exist anymore^^!
   )
  )
 
  rem il faut appuyer sur une touche pour continuer
  set /p ".=Press a key to continue..."<nul
  pause>nul
 
  rem efface le contenu de la fenetre
  cls
  rem met la couleur vert clair
  color a
  rem saute une ligne
  echo;
  rem note que les fichiers ont bien été supprimés
  echo;Files were successfully deleted
  rem saute une ligne
  echo;
  rem on vérifie si le dossier "12" existe bien
  if exist 12\nul (
    rem renomme le dossier "12" en l'année actuelle
    ren "12" "%Year%"
    rem note que le dossier 12 de l'année a bien été renommé par l'année actuelle
    echo;The Folder "12" of the year %Year% has been renamed "%Year%"^^!
  ) else (
    rem on note que le dossier "12" n'existe pas
    echo;ERROR: The Folder "12" of the year %Year% does not exist^^!
  )
  rem saute une ligne
  echo;
) else (
  rem saute une ligne
  echo;
  rem note que les fichiers de l'année n'ont pas été supprimés
  echo;The files of the year have not been deleted.
)
rem il faut appuyer sur une touche pour quitter
set /p ".=Press a key to exit..."<nul
pause>nul
rem quitte le programme
exit
 
 


 
pause>nul&exit
:getDate
  for /f "tokens=1,2 delims==" %%1 in ('WMIC Path Win32_LocalTime Get Year^,Month^,Day /Value') do (
    rem on vérifie que %%2 est un nombre
    set /a n=%%2 >nul 2>&1 && (
    rem %%~1 correspond à Year puis dans la boucle suivante à Month et enfin ensuite à Day
    rem tandis que %%~2 correspond à la valeur de Year puis dans la boucle suivante à la valeur de Month...etc
    rem ce qui donne (c'est un exemple) :
    rem    boucle 1 : set Year=2018
    rem    boucle 2 : set Month=6
    rem    boucle 3 : set Day=27
     set %%~1=%%~2
     rem on ajoute des leading zero pour avoir 06 au lieu de 6
     call :leadingZero %%~1
   )
  )
  rem on revient là où le programme était avant d'appeler :getDate
Exit /b
:leadingZero <VarName>
  rem on actualise la variable %~1
  set /a %~1=!%~1!+0
  rem si cette dernière est inférieur à 9 on ajoute un zéro devant
  if !%~1! leq 9 set %~1=0!%~1!
  rem on revient là où le programme était avant d'appeler :leadingZero
Exit /b


p.s : j'ai optimisé la partie avec les boucles :boucle, :fin et :imp




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Message Supprimer des fichiers précis, selon la date 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



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