[Batch] RD avec variable

Résolu/Fermé
Scouby64 Messages postés 186 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 30 juin 2009 - 27 oct. 2008 à 11:01
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 27 oct. 2008 à 22:08
Bonjour,

Je souhaite automatiser la suppression de sauvegarde sur une serveur de sauvegarde afin que le disque ne sature pas.
Je suis arrivé à pondre ce script qui s'exécute juste avant le lancement d'un sauvegarde :

ECHO ON

SET YYYYMMDD=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%
MKDIR %YYYYMMDD%


REM ###### SUPPRESSION DES VERSIONS ANTERIEURES ######

REM ### VARIABLES ###

SET mois=%DATE:~3,2%
SET jour=%DATE:~0,2%


REM ### DEBUT ###

REM ### ON DESCIDE DE GARDER 14j DE SAUVEGARDE ###
SET /a jour-=14

REM ### DANS LE CAS OU ANCIENNE SAUV EST DANS LE MEME MOIS ###
IF %jour% GEQ 1 GOTO OK

REM ### SINON... ###	
SET /a mois-=1

IF "0%mois%"=="01" GOTO :MAX
IF "0%mois%"=="02" GOTO :FEV
IF "0%mois%"=="03" GOTO :MAX
IF "0%mois%"=="04" GOTO :MIN
IF "0%mois%"=="05" GOTO :MAX
IF "0%mois%"=="06" GOTO :MIN
IF "0%mois%"=="07" GOTO :MAX
IF "0%mois%"=="08" GOTO :MAX
IF "0%mois%"=="09" GOTO :MIN
IF "0%mois%"=="10" GOTO :MAX
IF "0%mois%"=="11" GOTO :MIN
IF "0%mois%"=="12" GOTO :MAX

REM ### SI MEME MOIS ###	
:OK
SET nYYYYMMJJ=%DATE:~6,4%-%DATE:~3,2%-%jour%
GOTO SUITE

REM ### SI MOIS DE 31j ###
:MAX
SET njour=%jour%
SET /a njour=31+%njour%
SET nYYYYMMDD=%DATE:~6,4%-0%mois%-%njour%
GOTO SUITE

REM ### SI MOIS DE FEVRIER ###
:FEV
SET njour=%jour%
SET /a njour=28+%njour%
SET nYYYYMMDD=%DATE:~6,4%-0%mois%-%njour%
GOTO SUITE

REM ### SI MOIS DE 30j ###
:MIN
SET njour=%jour%
SET /a njour=30+%njour%
SET nYYYYMMDD=%DATE:~6,4%-0%mois%-%njour%
GOTO SUITE

REM ### SUPPRESSION ANCIENNE SAUVEGARDE ###
:SUITE
SET test=%nYYYYMMDD%
%test%
RD /s /q "%nYYYYMMDD%"
GOTO FIN
	
:FIN

PAUSE


Le problème est au niveau de la commande RD /s /q %nYYYYMMDD%
Lors des test, cette variable n'apparait pas, et donc il n'arrive pas a supprimer mon dossier date.

Merci pour d'éventuelles propositions.

3 réponses

Salut,
je ne comprend pas pourquoi tu ne mets pas directement:
set test=%DATE:~6,4%-%mois%-%ta_nouvelle_variable_jour% dans chaque label.
Ensuite dans tes IF successif pour le mois,
IF %mois%==1 goto :...
IF %mois%==2 goto :...
.
.
.....
devrais faire l'affaire , et si tu veux avoir le mois sur 2 chiffres tu rajoutes dans chaque label:
if %mois% lss 10 set mois=0%mois%
car IF "0%mois%"=="11" GOTO :MIN donc mois=12 et là tu vas comparer la chaine de caractere "011" avec "11" ce qui sera toujours faux...
J'espere ca pourra t'aider!!
@+
PS: tu devrais rajouter IF %mois%==0 car si mois=1 et le jour<14 tu fera mois-1=0..
0
Scouby64 Messages postés 186 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 30 juin 2009 10
27 oct. 2008 à 15:30
Merci beaucoup pour ta réponse et tes conseils. Après modification, voici la nouvelle version qui fonctionne, je pense, dans tous les cas :

SET YYYYMMDD=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%
MKDIR %YYYYMMDD%


REM ###### SUPPRESSION DES VERSIONS ANTERIEURES ######

REM ### VARIABLES ###

SET mois=%DATE:~3,2%
SET jour=%DATE:~0,2%


REM ### DEBUT ###

REM ### ON DESCIDE DE GARDER 14j DE SAUVEGARDE ###
SET /a jour-=14

REM ### DANS LE CAS OU ANCIENNE SAUV EST DANS LE MEME MOIS ###
IF %jour% GEQ 1 GOTO OK

REM ### SINON... ###	
SET /a mois-=1

REM ### Cas du mois de janvier ###
IF "%mois%"==0 GOTO :DEC

:SUI
IF "0%mois%"=="01" GOTO :MAX
IF "0%mois%"=="02" GOTO :FEV
IF "0%mois%"=="03" GOTO :MAX
IF "0%mois%"=="04" GOTO :MIN
IF "0%mois%"=="05" GOTO :MAX
IF "0%mois%"=="06" GOTO :MIN
IF "0%mois%"=="07" GOTO :MAX
IF "0%mois%"=="08" GOTO :MAX
IF "0%mois%"=="09" GOTO :MIN
IF "%mois%"=="10" GOTO :MAX
IF "%mois%"=="11" GOTO :MIN
IF "%mois%"=="12" GOTO :MAX

REM ### SI MEME MOIS ###	
:OK
RD /s /q %DATE:~6,4%-%DATE:~3,2%-%jour%
GOTO FIN

REM ### SI MOIS DE 31j ###
:MAX
SET njour=%jour%
SET /a njour=31+%njour%
IF "%mois%" LSS "10" GOTO :SIM
IF "%mois%" GEQ "10" GOTO :DOU

REM ### SI MOIS DE FEVRIER ###
:FEV
SET njour=%jour%
SET /a njour=28+%njour%
IF "%mois%" LSS "10" GOTO :SIM
IF "%mois%" GEQ "10" GOTO :DOU

REM ### SI MOIS DE 30j ###
:MIN
SET njour=%jour%
SET /a njour=30+%njour%
IF "%mois%" LSS "10" GOTO :SIM
IF "%mois%" GEQ "10" GOTO :DOU

REM ### SUPPRESSION ANCIENNE SAUVEGARDE pour mois <10 ###
:SIM
RD /s /q %DATE:~6,4%-0%mois%-%njour%
GOTO FIN

REM ### SUPPRESSION ANCIENNE SAUVEGARDE pour mois >=10 ###
:DOU
RD /s /q %DATE:~6,4%-%mois%-%njour%
GOTO FIN

:DEC
SET mois=12
GOTO SUI
	
:FIN


Encore merci chuka.
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
27 oct. 2008 à 22:08
2 rien!!;-)
@+
0