IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Comment compléter une variable de taille fixe avec des 0 devant.


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Par défaut Comment compléter une variable de taille fixe avec des 0 devant.
    Bonjour

    J'ai fais un programme qui renomme un ensemble de fichiers recus selon une convention de nommage avec un numero de lot qui s'incremente puis réaliser un zip avant envoi.

    Pour faire l'incrémentation j'ai créé un fichier lot.conf où j'ai mis la valeur "1" à l'intérieur qui sera récupérée par le programme.

    Tout fonctionne sauf pour une chose que je cherche à faire mais je n'y arrive pas: effectivement le champs qui contient le nom de lot doit être de taille 8 et donc à chaque traitement je dois renommé avec le nouveau incrément par exemple 2 et completer la variable de tel sorte à arriver à 8 donc je devrais avoir 0000002 et si j'ai 22 meme chose : 00000022...

    Je suis donc parti sur des calcul de taille de chaine mais impossible de voir comment ajouter ces 0

    voilà mon bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    @echo off
    setlocal EnableDelayedExpansion
    
    Rem ---- définition des variables---
    
    	set currentpath=%~dp0
    	set logdir=%currentpath%log\%date:~6,4%%date:~3,2%%date:~0,2%
    	set logfile=%logdir%\scan_gbr_%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%h%time:~3,2%%time:~6,2%.log
    	set /p LotNum=<%currentpath%\conf\lot.conf
    	set LotNum=!LotNum: =!
    	set /a LotNumNext=%LotNum%+1
    	set NN=0
    
    echo lot num = %LotNum%
    echo lot suivant = %LotNumNext%
    
    set hour=%time:~0,2%
    set min=%time:~3,2%
    set horodatage=%date:~6,4%%date:~3,2%%date:~0,2%T%hour%%min%
    
    	set repWork=%currentpath%WORK_GBR\
    	set repScan=%currentpath%SCAN_GBR\
    	set EXT=7z
    	set zipfile=BNPPLS_GBR_2_%horodatage%_0000%LotNum%.%EXT%
    
    Rem echo %horodatage%
    Rem echo %zipfile%
    Rem echo %hour%
    Rem echo %min%
    Rem echo total %hour%%min%
    Rem echo %dt%
    
    Rem ---------------------
    
    Rem ----Debut programme -------
    
    
    REM if not exist %repScan%*.eml GOTO :LOGS
    
    if not exist %repScan%*.eml GOTO :LOGS else echo toto
    
    REM else if (not exist %logdir%) mkdir %logdir% else goto :START
    
    
    
    :START
    del /Q %repWork%\* >> %logfile%
    
    cd SCAN_GBR >> %logfile%
    Move *.*  %repWork% >> %logfile%
    cd %RepWork% >> %logfile%
    
    FOR %%I IN (*.*) DO call :INCREM "%%I" >> %logfile%
    
    Rem "C:\Program Files\WinZip\Winzip8.1_FR\WINZIP32.exe" -a %repWork%%zipfile% %repWork%\*.* >> %logfile%
    
    "C:\Program Files\7-Zip\7-Zip 4.23\7za.exe" a %repWork%%zipfile% %repWork%\* >> %logfile%
    
    REM ------ Suppression fichiers après compression -----
    
    REM for /f "delims=" %%f in ('dir /b') do  if not %%~xf == .%EXT% del %%f >> %logfile%
    
    Rem --- incrémentation du numéro de lot -----
    
    echo %LotNumNext% >%currentpath%\conf\lot.conf
    
    Rem ----- Envoi CFT -----------
    
    Rem D:\APPS\CFTG\scripts\cftxsend.bat -D "%part%" -I "%idf%" -F "%chemin%+%fichier%" -P "%env%_%fichier%" –O “RUSER=CANON01M,SUSER=10000000,SAPPL=0x515E7A98”
    
    Rem ----- fin envoi CFT -------
    
    
    Rem --- fonction de renommage des fichiers -------
    
    REM GOTO: EOF
    :INCREM
    rename %1 "BNPPLS_GBR_2_%horodatage%_0000%LotNum%_0000000%NN%"
    set /A NN=NN+1
    
    Rem ----- fin Fonction Renommage ----
    
    :LOGS
    echo Pas de fichier à traiter: dossier Scan vide ! >> %logfile%

  2. #2
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Bonjour,

    J'avais déjà fait ce genre de code mais impossible de le retrouver du coup j'ai refais un petit quelque chose:
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    Setlocal EnableDelayedExpansion
     
    set "LotNum=2"
    set #=%LotNum%
    set Length=0
     
    :loop
    if defined # (
        set #=%#:~1%
        set /A Length += 1
        goto loop
    )
     
    if %Length% LSS 8 goto less_8
     
    :less_8
    set /a t=(8-%Length%)
     
    set LotNumZeros=0
    for /l %%i in (2,1,%t%) do call set "LotNumZeros=%%LotNumZeros%%%LotNumZeros%"
    set FinalLotNum=%LotNumZeros%%LotNum%
    echo %FinalLotNum%
    pause

    Tiens moi au courant.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 161
    Par défaut
    Hello DevilSnake !

    Merci beaucoup pour ta réponse super rapide !! et pardonne moi pour le délai de réponse !!!

    Je viens de tester ton bout de code dans un script à part et c'est EXACTEMENT ce que je cherche à faire !!!!

    Maintenant faut je trouve comment bien l'intégrer dans mes lignes de code mais pour cela faudrait que je comprenne un peu ton code: pourrais-tu STP me donner quelques explication ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @echo off
    Setlocal EnableDelayedExpansion    => Je l'ai mis aussi mais je ne sais pas à quoi ca sert exactement ?
     
    set "LotNum=2"
    set #=%LotNum% => # c est une commande DOS ou juste le nom du variable ?
    set Length=0    
     
    :loop
    if defined # (
        set #=%#:~1%    => Tu peux m'expliquer ? car en faisant un echo de chaque valeur je vois que la boucle passe 2 fois avec #=18 et length=0 la premiere fois et #=8 et Length=1 la 2eme -> comprend pas
        set /A Length += 1
        goto loop
    )
     
    if %Length% LSS 8 goto less_8
     
    :less_8
    set /a t=(8-%Length%)
     
    set LotNumZeros=0
    for /l %%i in (2,1,%t%) do call set "LotNumZeros=%%LotNumZeros%%%LotNumZeros%"   => Pourquoi la boucle commence à 2 ?
    set FinalLotNum=%LotNumZeros%%LotNum%
    echo %FinalLotNum%
    pause

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/03/2010, 15h52
  2. Comment protéger une feuille excel en vba avec des paramètres?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2007, 17h21
  3. Réponses: 45
    Dernier message: 06/03/2007, 16h30
  4. Réponses: 1
    Dernier message: 18/02/2007, 11h07
  5. Réponses: 3
    Dernier message: 05/01/2007, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo