[Batch] RD avec variable

Résolu
Scouby64 Messages postés 188 Date d'inscription   Statut Membre Dernière intervention   -  
chuka Messages postés 980 Statut Membre -
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.
Configuration: Windows XP
Firefox 3.0.3

3 réponses

  1. 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
  2. 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
  3. chuka Messages postés 980 Statut Membre 379
     
    2 rien!!;-)
    @+
    0