[Batch] RD avec variable

Résolu
Scouby64 Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   -  
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   -
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

chuka
 
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 188 Date d'inscription   Statut Membre Dernière intervention   10
 
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   Statut Membre Dernière intervention   378
 
2 rien!!;-)
@+
0