Inséere un 0 dans une variable batch

[Fermé]
Signaler
-
 methylene -
Bonjour,

Je suis en train de coder en batch (eh oui encore et toujours), et après avoir extrait le mois de la date, je viens soustraire -1.

Le souci, par exemple, c'est que si j'extrait mon mois en 05, et que je viens y soustraire "1" ou "01", le résultat sera 4, et je n'arrive pas à redonner à ma variable après l'opération le 0 devant le 4.

J'en ai besoin car je vais derriere effectuer une copie à partir de la date extraite et modifiée.

Je cite :

Set jour=%date:~0,2%
Set mois=%date:~3,2%
Set annee=%date:~6,4%
Set /a varmois=%mois%-01

@ echo %jour%-%mois%-%annee%
@ echo %varmois%

Cela m'affiche :

04/03/2010
2

J'ai essayer par exemple varmois=%%0%%varmois%. J'ai par ailleurs également un problème avec mes conditions.



If "%varmois%"=="0|1|2|3|4|5|6|7|8|9" Then set varmois=%%0%%varmois%

@echo %varmois%

Déjà cette ligne ne marche pas, ensuite est-ce que j'ai besoin de proposer un else, ou vas-t-il me garder la valeur initiale de varmois si la condition if n'est pas remplie ?


Merci d'avance

6 réponses

Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 331
hello
tu peux passer par une variable intermédiaire
C:> Set mois=%date:~3,2%
C:> echo %mois%
03
C:> Set /a varmois=%mois%-01
2
C:> set v=0%varmois%
C:> echo %v%
02

avec un 0 devant, tu vas avoir des problèmes avec 08 et 09,
C:> set /a x=08
Nombre non valide. Les constantes numériques doivent être soit décimales (17),
soit hexadécimales (0x11), soit octales (021).
Bon ben à priori j'ai trouvé comment faire, et cela gère même le cas de janvier, en prenant compte du changement d'année, j'espère juste que la fonction xcopy va maintenant accepter cette date.

Set jour=%date:~0,2%
Set mois=%date:~3,2%
Set annee=%date:~6,4%
Set /a varmois=%mois%-01

@ echo %varmois%

pause

@ echo off

if "%varmois%"=="0" set varmois=12
if "%varmois%"=="1" set varmois=01
if "%varmois%"=="2" set varmois=02
if "%varmois%"=="3" set varmois=03
if "%varmois%"=="4" set varmois=04
if "%varmois%"=="5" set varmois=05
if "%varmois%"=="6" set varmois=06
if "%varmois%"=="7" set varmois=07
if "%varmois%"=="8" set varmois=08
if "%varmois%"=="9" set varmois=09

@ echo %varmois%
@ echo %varannee%

pause

set vardate=%jour%/%varmois%/%annee%

@ echo %vardate

pause
En effet il y a un petit problème à 08 et 09, alors comment je fais ?
Messages postés
18246
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
21 juillet 2021
5 331
il faut supprimer le 0 devant
C:> set x=01

C:> if %x:~0,1%==0 (set /a x=%x:~-1%) else (set /a x=%x:~-2%)
1
C:> echo %x%
1

C:> set x=08

C:> if %x:~0,1%==0 (set /a x=%x:~-1%) else (set /a x=%x:~-2%)
8
C:> set x=10

C:> if %x:~0,1%==0 (set /a x=%x:~-1%) else (set /a x=%x:~-2%)
10
La solution :


set jour=%date:~0,2%
Set mois=%date:~3,2%
set annee=%date:~6,4%
Set lol=%mois:~0,1%


If "%lol%"=="0" Set mois=%mois:~1%

Set /a varmois=%mois%-1

@ echo off

if "%varmois%"=="0" set varmois=12
if "%varmois%"=="12" set /a annee=%annee%-1
if "%varmois%"=="1" set varmois=01
if "%varmois%"=="2" set varmois=02
if "%varmois%"=="3" set varmois=03
if "%varmois%"=="4" set varmois=04
if "%varmois%"=="5" set varmois=05
if "%varmois%"=="6" set varmois=06
if "%varmois%"=="7" set varmois=07
if "%varmois%"=="8" set varmois=08
if "%varmois%"=="9" set varmois=09

set vardate=%jour%/%varmois%/%annee%

@ echo %vardate%

pause
Merci pour votre réponse dubcek, au final la même idée :).