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 :

extraction caractère d'une chaine de caractère dans un fichier texte [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut extraction caractère d'une chaine de caractère dans un fichier texte
    Bonjour,

    Je tourne autour d'un problème que je n'arrive pas à résoudre et je viens donc faire appel à vous.

    Petite explication :
    J'ai un serveur d'impression nommé SRV1, nous avons ajouté les imprimantes sur un autre serveur (SRV2). Un script de session remonte les imprimantes des utilisateurs (différentes selon leurs groupes dans l'AD et entres utilisateurs).
    J'ai un script qui me permet de sauvegarder le nom de l'imprimante par défaut d'un utilisateur (qui est celle présente sur SRV1) pour faire appel au fichier texte qui basculerais cette même imprimante automatiquement par défaut avec le préfixe du nouveau serveur (elles ont le même nom entre SRV1 et SRV2).
    Seul problème, la chaîne de caractère qui est inscrite dans le fichier txt créé est sous forme : \\SRV1\nom_imprimante (le nom est de la forme F000 )

    J'aimerais simplement qu'il m'affiche nom_imprimante pour faire appel au fichier txt qui placerais le nom de l'imprimante sous forme \\SRV2\nom_imprimante.

    J'ai penser le faire avec la fonction count mais je ne vois pas comment faire pour ressortir les 4 derniers caractères sur le fichier texte.

    Voila le batch que j'ai pour le moment.

    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
    @echo off
    Rem récupère la clef dde registre contenant l'imprimante par defaut et supprime toutes les options à "," derrière
    for /F "eol=, tokens=1,2,3,4 delims=," %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /s^|find "winspool"') do set TEST=%%i
    Rem créer un variable test contenant ce que renvoi la fonction for au dessus
    set TEST=%TEST%
    Rem Ecrit la varaible dans le fichier txt
    echo %TEST%>C:\ImpDefaut.txt
    Rem Récupère le nom de l'imprimante en 4 variables et la met dans une seule
    FOR /f "tokens=1,2,3,4,5,6" %%i in ('find /i "REG_SZ" "C:\ImpDefaut.txt"') do set IMP=%%k %%l %%m %%n
    
    Rem créer un variable test contenant ce que renvoi la fonction for au dessus
    set IMP=%IMP%
    :ImpReseau
    
    Rem Vérifie s'il y a trois espaces en fin de ligne
    set IMPR=%IMP:~-3%
    if "%IMPR%"=="  " goto :SupprEspace3
    
    Rem Vérifie s'il y a deux espaces en fin de ligne
    set IMPR=%IMP:~-2%
    if "%IMPR%"=="  " goto :SupprEspace2
    
    Rem Vérifie s'il y a un espace en fin de ligne
    set IMPR=%IMP:~-1%
    if "%IMPR%"==" " goto :SupprEspace
    
    Rem Ecrit la variable IMP dans le fichier txt
    echo %IMP%>C:\ImpDefaut.txt
    goto :exit
    :SupprEspace
    echo %IMP:~0,-1%>C:\ImpDefaut.txt
    
    Rem Sort du script
    goto :exit
    :SupprEspace2
    echo %IMP:~0,-2%>C:\ImpDefaut.txt
    
    Rem Sort du script
    goto :exit
    :SupprEspace3
    PS : Le fichier texte sera stocké sur le lecteur réseau de l'utilisateur pour que le script d'ouverture de session.


    Merci d'avance pour vos réponse.

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Voilà une technique qui utilise les Modifiers dans la boucle FOR

    Je t'ai fait ce petit exemple qui t'élimine également les espaces si il y en a


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off
    
    ::On simule l'élement récuperé dans ton fichier .txt avec espace
    set "$imp=\\SRV1\F001   "
    
    for %%a in (%$imp%) do set $imp=%%~na
    
    ::On imprime la sortie
    echo Imprimante : [%$imp%]
    Tu vois que les espaces ne sont plus là.


  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ton aides, je vais tester ça et je viendrais t'informer de mon résultat.


    EDIT : Le résultat en sortie dans mon fichier texte ne change pas. J'ai toujours \\SRV1\F000 mais sans espace après l'imprimante contrairement a tout a l'heure.

    Je voulais savoir si il fallait bien placer ton code après ma boucle for ? Si oui voici la façon dont je l'ai mis mais je ne suis pas sur. Désoler je débute avec ce langage j'ai encore beaucoup de mal


    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
    @echo off
    Rem récupère la clef dde registre contenant l'imprimante par defaut et supprime toutes les options à "," derrière
    for /F "eol=, tokens=1,2,3,4 delims=," %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /s^|find "winspool"') do set TEST=%%i
    
    @echo off
    ::On simule l'élement récuperé dans ton fichier .txt avec espace
    set "$imp=\\SRV1\F001   "
    for %%a in (%$imp%) do set $imp=%%~na
    ::On imprime la sortie
    echo Imprimante : [%$imp%]
    
    Rem créer un variable test contenant ce que renvoi la fonction for au dessus
    set TEST=%TEST%
    
    Rem Ecrit la varaible dans le fichier txt
    echo %TEST%>E:\ImpDefaut.txt
    
    Rem Récupère le nom de l'imprimante en 4 variables et la met dans une seule
    FOR /f "tokens=1,2,3,4,5,6" %%i in ('find /i "REG_SZ" "E:\ImpDefaut.txt"') do set IMP=%%k %%l %%m %%n
    
    Rem créer un variable test contenant ce que renvoi la fonction for au dessus
    set IMP=%IMP%
    :ImpReseau
    
    Rem Vérifie s'il y a trois espaces en fin de ligne
    set IMPR=%IMP:~-3%
    if "%IMPR%"=="  " goto :SupprEspace3
    
    Rem Vérifie s'il y a deux espaces en fin de ligne
    set IMPR=%IMP:~-2%
    if "%IMPR%"=="  " goto :SupprEspace2
    
    Rem Vérifie s'il y a un espace en fin de ligne
    set IMPR=%IMP:~-1%
    if "%IMPR%"==" " goto :SupprEspace
    
    Rem Ecrit la variable IMP dans le fichier txt
    @echo off
    
    echo %IMP%>E:\ImpDefaut.txt
    goto :exit
    :SupprEspace
    echo %IMP:~0,-1%>E:\ImpDefaut.txt
    
    Rem Sort du script
    goto :exit
    :SupprEspace2
    echo %IMP:~0,-2%>E:\ImpDefaut.txt
    
    Rem Sort du script
    goto :exit
    :SupprEspace3
    Merci d'avance.

  4. #4
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    D'après ton code je pensais que tu avait de bonne base en BAT


    Voilà ton code corrigé :

    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
    Rem récupère la clef dde registre contenant l'imprimante par defaut et supprime toutes les options à "," derrière
    for /F "eol=, tokens=1,2,3,4 delims=," %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /s^|find "winspool"') do set TEST=%%i
    Rem créer un variable test contenant ce que renvoi la fonction for au dessus
    set TEST=%TEST%
    Rem Ecrit la varaible dans le fichier txt
    echo %TEST%>C:\ImpDefaut.txt
    Rem Récupère le nom de l'imprimante en 4 variables et la met dans une seule
    FOR /f "tokens=1,2,3,4,5,6" %%i in ('find /i "REG_SZ" "C:\ImpDefaut.txt"') do set IMP=%%k %%l %%m %%n
    
    ::récupère le dernier élément du path imprimante
    
    for %%a in (%imp%) do set $imp=%%~na
    
    Rem Ecrit la variable IMP dans le fichier txt
    echo %$IMP%>C:\ImpDefaut.txt
    Test et retourne !


  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ton aides.

    Non j'ai récupéré un script qui ne fonctionnait pas d'un ancien stagiaire et j'ai réussi à ressortir les imprimantes mais pas comme je voulais ^^
    Et comme je veux me plonger dans le langage j'ai voulu mettre directement les mains dans la pâte

    Je testerais ça demain au boulot et encore une fois merci, je te retournerais le résultat

    EDIT: Un immense merci a toi, ça fonctionne
    Je vais pouvoir terminer mon script d'ouverture de session maintenant

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/01/2010, 22h03
  2. Réponses: 1
    Dernier message: 08/02/2009, 23h18
  3. Réponses: 10
    Dernier message: 24/11/2008, 13h14
  4. Réponses: 5
    Dernier message: 26/08/2008, 16h00
  5. Réponses: 5
    Dernier message: 02/08/2007, 11h31

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