Inséere un 0 dans une variable batch

methylene -  
 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
Configuration: Windows XP / Internet Explorer 8.0

6 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  2. methylene
     
    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
  3. methylene
     
    En effet il y a un petit problème à 08 et 09, alors comment je fais ?
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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