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 :

Rechercher et renommer une chaine de caractère complexe dans un fichier texte [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut Rechercher et renommer une chaine de caractère complexe dans un fichier texte
    Bonjour à tous,

    Aujourd'hui je m'adresse à vous car je suis totalement perdu. Depuis peu j'essaye d'automatiser certaines tâches par des scripts, mais je dois avouer que je n'y connais rien.

    Il se trouve que dans mon entreprise nous utilisons un logiciel (sur une cinquantaine de postes) qui utilise les listes blanches et noires. Il faudrait que j'arrive à modifier une suite de ces valeurs sans toucher aux autres. Car il me faudrait un temps monstre pour tout faire à la main, que je n'ai pas. De plus, tous les ordis ont des listes blanches et noires différentes.

    P.ex :
    "Whitelist"=hex(7):32,00,34,00,37,00,37,35,00,39,39,00,39,00,31,00,39,00,00,00,\
    36,00,36,00,35,00,32,00,37,00,34,00,36,00,34,00,35,00,00,00,32,00,34,00,37,\

    je voudrais remplacer : 00,35,00,00,00,32,00,34,00,37,\
    par : 00,39,00,33,00,35,00,30,00,31,\

    mais malgré mes recherches et les nombreux posts à ce sujet je ne suis arrivé à rien...

    Si une âme généreuse pouvait m'aider...

    Merci...

  2. #2
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Il va falloir être plus précis sur ce que tu veux remplacer.
    J'imagine que la c'est un exemple que tu donnes, il faut que tu nous donnes la règle de gestion générale.
    Veux-tu remplacer les n derniers nombres ? Toujours la même serie de nombres ? Autre ?

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut
    Hey,

    En réalité, ce que je veux faire c'est :
    1* extraire la clé de registre
    2* si la valeur existe, la modifier en la remplaçant seulement, sans porter atteinte aux autres
    3* puis la réinjecter
    4* relancer le service

    Je sais tout faire sauf le 2*.

    Oui c'est toujours la même série de nombre que je veux changer, s'il existe, qui correspond à un numéro d'autorisation d'accès (généré à partir du numéro de série de la carte mère) de l'ancien ordi sortant par celui du nouvel ordi.

    Je ne sais pas si je suis assez compréhensible...

    J'ai dans mon fichier texte (Text.txt) :

    "Whitelist"=hex(7):32,00,34,00,37,00,37,35,00,39,39,00,39,00,31,00,39,00,00,00,\
    36,00,36,00,35,00,32,00,37,00,34,00,36,00,34,00,35,00,00,00,32,00,34,00,37,\

    00,39,00,00,00

    Le code de l'ancien ordi : 00,00,00,\
    36,00,36,

    à remplacer par : 34,00,37,\
    00,39,00,

    Voila, j'espère que tu auras compris... (...pas sûr avec mes explications...)

    Mais qu'est ce que tu entends par "la règle générale de gestion" ?

    J'ai essayé de composer autour des idées de scripts que j'ai glané :
    http://blogs.technet.com/b/heyscript...text-file.aspx
    (que je n'arrive pas à faire fonctionner, il ne fait que rajouter un carré à la fin du fichier Text.txt)

    puis j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for /f "delims=," %%a in ('type Text.txt') do call :commande "%%a"
    :commande
    set ligne=%ligne:00,00,00,\36,00,36,=34,00,37,\00,39,00,%
    @echo %ligne% >>Text2.txt
    Même en potassant, je n'arrive pas à trouver la solution...

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut
    Petit retour, j'ai trouvé ça mais comme je débute en script que depuis un mois... Mon niveau n'est pas assez suffisant pour bien le comprendre...
    Qu'est ce que vous en pensez ?

    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
    Private Function ChangeWords(sWordsToRemove, sWordsToChange, sFile)
    
        If FileExists(sFile) Then
    '       ouvre le  fichier
            Dim sBuffer
            sBuffer = ReadDataFromFile(sFile)
    '       ligne à changer existe?
            If InStr(1, sBuffer, sWordsToRemove) > 0  Then
                sBuffer = Replace(sBuffer, sWordsToRemove,  sWordsToChange)
                WriteDataToFile sFile, sBuffer
                ChangeWords = True
            End If
    End Function
    
    
    Function ReadDataFromFile(sPathFile)
    '    reader
        Dim oFSO
        Set oFSO = CreateObject("Scripting.fileSystemObject")
    '    fichier
        Dim oFile
        Set oFile = oFSO.GetFile(sPathFile)
    '   stream
        Dim oStream
        Set oStream = oFile.OpenAsTextStream(ForReading)
        
    '   retour
        ReadDataFromFile = oStream.ReadAll
    '   nettoyage
        oStream.Close
        Set oStream = Nothing
        Set oFile = Nothing
        Set oFSO = Nothing
    End Function
    
    Function FileExists(sPathFile)
    '    reader
        Dim oFSO
        Set oFSO = CreateObject("Scripting.fileSystemObject")
        
    '    retour
        FileExists = oFSO.FileExists(sPathFile)
        
    '   nettoyage
        Set oFSO = Nothing
    End Function
    
    Sub WriteDataToFile(sPathFile, sData)
    '   reader
        Dim oFSO
        Set oFSO = CreateObject("Scripting.fileSystemObject")
    '   fichier : chemin, 2 pour  écrire (et écraser), True pour forcer la création du fichier
        Dim oFile
        Set oFile = oFSO.openTextFile(sPathFile, 2, True)
    '   écriture
        oFile.Write sData
    '    nettoyage
        oFile.Close
        Set oFile = Nothing
        Set oFSO = Nothing
    End Sub
    
    'UTILISATION  :
    WriteDataToFile "c:\machin.txt", "mon texte à écrire"

  5. #5
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    for /f "delims=," %%a in ('type Text.txt') do call :commande "%%a"
    :commande
    set ligne=%ligne:00,00,00,\36,00,36,=34,00,37,\00,39,00,%
    @echo %ligne% >>Text2.txt

    J'imagine que les \ dans ton fichier de texte sont des retours à la ligne ? Que ce soit le cas ou non, si le format de ton fichier est bien sur plusieurs lignes comme indiqué, c'est ça le plus génant.
    Tu ne peux pas non plus simplement faire le set comme indiqué sur chaque demi-ligne, car tu risque de remplacer des choses que tu ne veux pas.


    Par règle de gestion je veux dire quelque chose de toujours vrai qui permet de trouver facilement la chaine à remplacer.
    Par exemple dans ton cas, les 00,00,00\ en fin de première ligne et les 36,00,36 en début de seconde.
    Les lignes font-elles toujours le meme nombre de caractères ?
    ...

    Toutes ces questions permetteront de répondre ensuite plus ou moins facilement à ton problème.


    Pour ce qui est du script que tu indiques dans ton dernier post. Ce n'est plus du batch mais du VBScript. Tu peux faire ce que tu souhaites en VB, mais tu n'es plus sur le bon forum.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut
    Citation Envoyé par Drizzt [Drone38] Voir le message
    J'imagine que les \ dans ton fichier de texte sont des retours à la ligne ?

    Les lignes font-elles toujours le meme nombre de caractères ?

    Pour ce qui est du script que tu indiques dans ton dernier post. Ce n'est plus du batch mais du VBScript. Tu peux faire ce que tu souhaites en VB, mais tu n'es plus sur le bon forum.
    Oui ce sont des retours à la ligne...

    Non elles ne font pas toutes le même nombre de caractères... Car j'aurais bien essayé de mettre des tokens... (Enfin si je ne me trompe pas...)

    Euh... Là ou j'en suis je prends tout, batch ou vbscript !

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/09/2014, 16h12
  2. Rechercher et remplacer une chaine à un endroit précis dans un fichier
    Par david2109 dans le forum Shell et commandes POSIX
    Réponses: 17
    Dernier message: 26/08/2013, 22h35
  3. Réponses: 10
    Dernier message: 07/07/2011, 13h19
  4. Réponses: 11
    Dernier message: 05/11/2007, 14h38

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