Rechercher : dans
Par :

[Batch] RD avec variable

Dernière réponse le 27 oct 2008 à 22:08:14 Scouby64, le 27 oct 2008 à 11:01:44 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [Batch] RD avec variable » dans :
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
[Bash] La variable d'environnement PATH VoirLa variable d'environnement PATH I. Préambule II. C'est quoi le shell ? III. Définition IV. Séance de dissection V. Ajouter un répertoire à la variable PATH VI. Et puis... I. Préambule Sous les systèmes GNU/Linux qu'on le veuille ou...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Variables d'environnement VoirVariables d'environnement Une variable d'environnement est une valeur dynamique, chargée en mémoire, pouvant être utilisée par plusieurs processus fonctionnant simultanément. Sur la plupart des systèmes d'exploitation, les emplacement de...
PHP - Les variables VoirConcept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...

1

chuka, le 27 oct 2008 à 12:58:42

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..

Répondre à chuka

2

Scouby64, le 27 oct 2008 à 15:30:00

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.

Répondre à Scouby64

3

 chuka, le 27 oct 2008 à 22:08:14

2 rien!!;-)
@+

Répondre à chuka