Inséere un 0 dans une variable batch

Fermé
methylene - 4 mars 2010 à 15:07
 methylene - 4 mars 2010 à 16:52
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

dubcek Messages postés 18724 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 15 mai 2024 5 615
4 mars 2010 à 15:21
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).
0
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
0
En effet il y a un petit problème à 08 et 09, alors comment je fais ?
0
dubcek Messages postés 18724 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 15 mai 2024 5 615
4 mars 2010 à 16:27
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
Merci pour votre réponse dubcek, au final la même idée :).
0