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

VBScript Discussion :

Script de remplacement de chaine de caracteres : vide aleatoirement les fichiers REG


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Par défaut Script de remplacement de chaine de caracteres : vide aleatoirement les fichiers REG
    Bonjour;

    je ne maitrise pas du tout le vb. J'ai trouvé ceci pour remplacer une chaine de caractères dans un fichier:
    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
    'To use this revised script (which we’ll call replace.vbs) just type a command similar to this from the command prompt:
    'cscript replace.vbs "C:\Scripts\Text.txt" "Jim " "James "
     
     
    Const ForReading = 1    
    Const ForWriting = 2
     
    strFileName = Wscript.Arguments(0)
    strOldText = Wscript.Arguments(1)
    strNewText = Wscript.Arguments(2)
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
    strText = objFile.ReadAll
    objFile.Close
     
    strNewText = Replace(strText, strOldText, strNewText)
    Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
    objFile.Write strNewText  'WriteLine adds extra CR/LF
    objFile.Close
    celui ci fonctionne très bien et me permet de changer la page d’accueil des navigateurs dans mes GPO MAIS:
    il semble que certain fichier ne se comporte pas de la bonne manière. Certain fichier sont littéralement vidé !

    Après divers test je ne comprend pas si j'ai un problème de dénomination, de contenu, d’écriture (j'ai déplace a la racine d: les fichiers pour voir...)

    fichier de référence qui fonctionne correctement
    \SysWOW64_GroupPolicy\User\Scripts\Logon\ScriptCommun\FireFox\userFIREFOX-cache0.js

    fichier OK:
    SysWOW64_GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxyIE.reg (test en retirant le "-")
    SysWOW64_GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-IE (test en retirant l'extention .reg)

    fichier ok a la racine d:
    d:\proxy-IE.reg (nom d'origine)

    fichier vidé avec message d'erreur:
    SysWOW64_GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-IE.reg (nom d'origine)
    SysWOW64_GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxyIE (test en retirant l'extention .reg et le "-")

    \SysWOW64_GroupPolicy\User\Scripts\Logon\ScriptCommun\FireFox\proxy-IE.reg (nom d'origine dans le dossier FireFox)

    message erreur:
    d:\replace.vbs(19:1) Erreur d'execution Microsoft VBScript: Argument ou appel de procedure incorect

    je n'est pas de différence de droit d'ecriture entre ScriptCommun\FireFox et ScriptCommun\IE

    A quoi je dois ce phénomène ?

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Par défaut resolution
    la réponse ici: https://msdn.microsoft.com/de-de/lib...(v=vs.84).aspx

    j'ai ajouté pour une ouverture des fichier en ASCII:

    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
    Const ForReading = 1
    Const ForWriting = 2
    Const Unicode = 0 '<-------------------
     
    strFileName = Wscript.Arguments(0)
    strOldText = Wscript.Arguments(1)
    strNewText = Wscript.Arguments(2)
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
    strText = objFile.ReadAll
    objFile.Close
     
    strNewText = Replace(strText, strOldText, strNewText)
    Set objFile = objFSO.OpenTextFile(strFileName, ForWriting, False, 0) ' <-------------------------
    objFile.Write strNewText 'WriteLine adds extra CR/LF
    objFile.Close
    sa a marché deux fois et puis sa recommence... mème avec la VM rebootée ...
    le phénomène est maintenant totalement aléatoire sur différent .reg

    il vide même des fichiers ou il n'a rien a modifier.

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    La modification apportée n'a rien ajouté au code puisque par défaut le fichier est ouvert au format ascii si le dernier paramètre est omis.

    Pour ne pas toucher aux fichiers ne contenant pas de texte à rechercher/modifier, on peut les épargner ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Const vbTextCompare = 1
     If InStr(1, strText, strOldText, vbTextCompare) > 0 Then
        strNewText = Replace(strText, strOldText, strNewText)
        Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
        objFile.Write strNewText  'WriteLine adds extra CR/LF
        objFile.Close
     Else
        Wscript.Quit
     End If
    ce code est à placer juste après la première fermeture du fichier lu.

    Moi, j'utiliserais une autre variable pour le texte à écrire dans le fichier s'il doit être modifié évitant ainsi l'ambiguïté qui pourrait survenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Const vbTextCompare = 1
    Dim NewTxt
     If InStr(1, strText, strOldText, vbTextCompare) > 0 Then
        NewTxt = Replace(strText, strOldText, strNewText)
        Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
        objFile.Write NewTxt  'WriteLine adds extra CR/LF
        objFile.Close
     Else
        Wscript.Quit
     End If
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Par défaut
    merci pour ton attention.

    j'ai fusionné ton second code comme ceci:
    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
    Const ForReading = 1    
    Const ForWriting = 2
    Const Unicode = 0
    Const vbTextCompare = 1
     
    strFileName = Wscript.Arguments(0)
    strOldText = Wscript.Arguments(1)
    strNewText = Wscript.Arguments(2)
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
    strText = objFile.ReadAll
    objFile.Close
     
     
    Dim NewTxt
     If InStr(1, strText, strOldText, vbTextCompare) > 0 Then
        NewTxt = Replace(strText, strOldText, strNewText)
        Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
        objFile.Write NewTxt  'WriteLine adds extra CR/LF
        objFile.Close
     Else
        Wscript.Quit
     End If
    message : replace2.vbs(1,1) erreur d'execution Ms VBs : redefinitoin de nom : 'vbTextCompare'
    si je commente 'Const vbTextCompare = 1 je reviens dans la situation initiale; les fichier .reg sont vidé aleatoirement au passage du script vb.

    je ne pense pas qu'il soit nécessaire de comparer le chaine de caractère "old" et "new" le script étant appliqué en cas de changement des page d’accueil des navigateurs via un OCS.

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Effectivement, vbTextCompare est pré-déclarée et reconnue en VbScript

    Quant aux fichiers vidés de leur contenu en exécutant le script, cela semble un peu bizarre.

    Peut-être que cela a une relation avec le système : Je me rappelle que lorsqu'on ouvrait un fichier .reg de Win XP avec le bloc note de Win 98 pour l'éditer, le fichier était illisible. Il fallait l'enregistrer avec WordPad dans Win XP pour pouvoir l'éditer sous WIN 98.(question de codage !).

    Il se peut que ce soit le cas pour les fichiers vidés !!

    Mais avant de faire quoi que ce soit, on va essayer avec ce :
    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
    Const ForReading = 1    
    Const ForWriting = 2
    ' la syntaxe en ligne de commandes sera alors : cscript replace.vbs "C:\Scripts\Text.txt" "Jim "
    strFileName = Wscript.Arguments(0)
    strOldText = Wscript.Arguments(1)
    'strNewText = Wscript.Arguments(2)
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
    strText = objFile.ReadAll
    objFile.Close
     
    Dim NewTxt
     If InStr(1, strText, strOldText, vbTextCompare) > 0 Then
        strNewText = InputBox("La chaîne '" & strOldText & "' a été retrouvée" & vbcrlf & _
        "TAPEZ maintenant la chaîne de remplacement SVP", "Remplacement de texte")
        If strNewText = "" Then Wscript.quit
        NewTxt = Replace(strText, strOldText, strNewText & " ")
        Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
        objFile.Write NewTxt
        objFile.Close
     Else
        Wscript.Quit
     End If
    ' Affichage des valeurs des variables
    Wscript.echo strFileName & "  __  strOldText = " & strOldText & "  __  strNewText = " & strNewText
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Par défaut
    mes premiers tests sont effectué sur du W7 x64. J'ai aussi du W10 x64 et XP sur le parc.

    lorsque je passe cette commande il ne se passe rien dans mon fichier:
    cscript replace2.vbs "C:\Windows\SysWOW64\GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-IE.reg" "http://www.xxxxxx.com"
    je n'est même pas la demande de nouvelle chaine.

    par contre avec un fichier plat (masterpreference de chrome) ou user.js (pour Firefox) sa fonctionne bien: demande la chaîne de remplacement.(la demande de la chaîne de remplacement n'est pas souhaitable dans mon cas )

    le contenu de proxy-IE.reg: en gras le champ a modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
    "Start Page"="http://www.xxxxxx.com"
    "Search Page"="about:blank"

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

Discussions similaires

  1. remplacement de chaines de caracteres
    Par catwalk dans le forum Linux
    Réponses: 1
    Dernier message: 29/08/2007, 23h25
  2. Remplacer une chaîne de caractères dans un fichier .hex
    Par subsix dans le forum Assembleur
    Réponses: 8
    Dernier message: 23/11/2006, 21h06
  3. Réponses: 10
    Dernier message: 16/06/2006, 13h53
  4. [debutant][String] Remplacer une chaine de caractère contenant un ?
    Par Jarodnet dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/10/2005, 12h47
  5. Réponses: 9
    Dernier message: 31/05/2005, 14h34

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