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 :

[BATCH] Variable d'un for et substring


Sujet :

Scripts/Batch

  1. #1
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut [BATCH] Variable d'un for et substring
    Hello

    Je cherche depuis un bon moment déjà comment effectuer un substring dans un fichier batch

    Voilà mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      echo substr = %%a~7,-13%%.txt
    )
    Celui ci me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a = OSPV6_AAP_20090206.txt
    substr = OSPV6_AAP_20090206.txt~7,-13%.txt
    a = OSPV6_IMVN_20090206.txt
    substr = OSPV6_IMVN_20090206.txt~7,-13%.txt
    a = OSPV6_IMVO_20090206.txt
    substr = OSPV6_IMVO_20090206.txt~7,-13%.txt
    a = OSPV6_PIL1_20090206.txt
    substr = OSPV6_PIL1_20090206.txt~7,-13%.txt
    a = OSPV6_PIL2_20090206.txt
    substr = OSPV6_PIL2_20090206.txt~7,-13%.txt
    J'ai essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      echo substr = %a~7,-13%.txt
    )
    mais il me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a = OSPV6_AAP_20090206.txt
    substr = .txt
    a = OSPV6_IMVN_20090206.txt
    substr = .txt
    a = OSPV6_IMVO_20090206.txt
    substr = .txt
    a = OSPV6_PIL1_20090206.txt
    substr = .txt
    a = OSPV6_PIL2_20090206.txt
    substr = .txt
    Comment faire pour avoir une substring d'une variable d'une boucle for ?

    Merci d'avance

    EDIT : Je viens de voir ça

    donc j'ai testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      set tmpvar=%%a
      echo substr = !tmpvar:~7.-13!.txt
    )
    mais pas mieux

    Re EDIT : J'essaie de comprendre mais j'ai un peu de mal... Je sens que je vais finir par faire un vbs si ca me gonfle trop

    J'ai fais ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      set tmpvar=%%a
      if !tmpvar:~7.-13! == AAP echo AAP
      if !tmpvar:~7.-13! == IMVN echo IMVN
      if !tmpvar:~7.-13! == IMVO echo IMVO
      if !tmpvar:~7.-13! == PIL1 echo PIL1
      if !tmpvar:~7.-13! == PIL2 echo PIL2
    )
    et j'obtiens ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a = OSPV6_AAP_20090206.txt
    a = OSPV6_IMVN_20090206.txt
    a = OSPV6_IMVO_20090206.txt
    a = OSPV6_PIL1_20090206.txt
    a = OSPV6_PIL2_20090206.txt
    donc je n'ai aucun IF valide alors que je devrais en avoir au moins 1 valide à chaque fois

  2. #2
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    essaye comme ca:

    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
    @echo off
    
    setlocal enableDelayedExpansion 
    
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      set tmpvar=%%a
      if !tmpvar:~7.-13! == AAP echo AAP
      if !tmpvar:~7.-13! == IMVN echo IMVN
      if !tmpvar:~7.-13! == IMVO echo IMVO
      if !tmpvar:~7.-13! == PIL1 echo PIL1
      if !tmpvar:~7.-13! == PIL2 echo PIL2
    )
    
    
    endlocal
    Tu n'avvai pas activer l'expension des variables

  3. #3
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Pas mieux :S

    J'ai un peu de mal avec le batch :'(

    J'ai une série de fichiers qui ont cette tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OSPV6_XXXX_yyyymmjj.txt
    avec XXXX le code que je cherche à extraire (ou au pire OSPV6_XXXX) qui est évidement de taille variable, dans le but de renommer mes fichiers pour qu'ils aient un nom "fixe" dans le temps (la procédure que j'appelle derrière ne gère pas les noms de fichiers variables)

    Évidement le yyyymmjj n'est pas forcément la date du jour (sinon ça serait trop simple

    D'où l'idée d'extraire les caractères de 7 (ignorer le OSPV6_) à -13 (ignorer le _yyyymmjj.txt) et de renommer le fichier ainsi...

    Mais bon, si j'ai déjà du mal à extraire les XXXX des noms de fichiers c'est pas gagné :S

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    
    setlocal enableDelayedExpansion 
    
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      set tmpvar=%%a
      set tmpvar2 = !tmpvar:~7.-13!
      echo %tmpvar2%
    )
    endlocal
    N'a pas l'air de fonctionner mieux :'( (avec les IF non plus d'ailleurs)

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Salut,

    c'est plutôt comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    
    setlocal enableDelayedExpansion 
    
    for %%a in (OSPV6_*.txt) do (
      echo a = %%a
      set tmpvar=%%a
      set tmpvar=!tmpvar:~7,-13!
      echo.!tmpvar!
    )
    endlocal
    PS: avec une boucle FOR /F et un delims=_ vous pouvez extraire vos sous-chaines sans même connaitre sa longueur:
    FOR /?

  5. #5
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Merci pour l'aide je garde ça dans un coin, mais finalement j'ai utilisé une autre méthode (vbscript + SSIS) qui fonctionne

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2003
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par mioux Voir le message
    Merci pour l'aide je garde ça dans un coin, mais finalement j'ai utilisé une autre méthode (vbscript + SSIS) qui fonctionne
    Dommage car la solution etait simple avec for /f delims:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=1-3 delims=_" %a in (dir) do echo %a + %b + %c

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affecter variable dans boucle FOR batch
    Par efferalgan dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 25/10/2007, 14h25
  2. Affectation à la variable de boucle FOR 'i'
    Par nek_kro_kvlt dans le forum Delphi
    Réponses: 3
    Dernier message: 11/10/2006, 17h03
  3. [BATCH] Aide sur boucle for et test
    Par t_om84 dans le forum Windows
    Réponses: 3
    Dernier message: 07/06/2006, 10h12
  4. [debutant]gérer plusieurs variables dans un for ?
    Par Merfolk dans le forum Débuter
    Réponses: 5
    Dernier message: 09/03/2006, 21h01
  5. Réponses: 37
    Dernier message: 02/03/2006, 01h58

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