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

  1. #1
    Membre à l'essai
    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
    Points : 15
    Points
    15
    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 à l'essai
    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
    Points : 15
    Points
    15
    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 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    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 à l'essai
    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
    Points : 15
    Points
    15
    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 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    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 à l'essai
    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
    Points : 15
    Points
    15
    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"

  7. #7
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par Crayven Voir le message
    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
    Windows Registry Editor Version 5.00  [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] "Start Page"="http://www.xxxxxx.com" "Search Page"="about:blank"
    http://jc.bellamy.free.fr/fr/vbsobj/...ntextfile.html V

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

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    La demande de la chaine de remplacement n'est là que pour voir si le fichier contient la chaine à remplacer ou non.

    Si elle y est on la remplace sinon on ferme le fichier sans le modifier.
    Une fois tout est rentré dans l'ordre, on peut supprimer cette demande et le traitement se fera sans interaction.

    J'ai construit le chemin indiqué et j'y ai placé le fichier Proxy-IE.reg, cela marche sans problème.

    Peut-être que(pour le chemin indiqué dans ton dernier message) c'est le respect de la casse qui en ai la cause. Pour éviter ce genre de problèmes, on modifie la condition sur le contenu du fichier .reg en ne faisant pas de différence Majuscule/Minuscule : If InStr(1, LCase(strText), LCase(strOldText), vbTextCompare) > 0 Then
    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

  9. #9
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    merci hackoofr, j'avais notifier ceci dans mon second post ;-)

    l_autodidacte; le chemin n'a pas d'impact: après avoir copier mes .reg a la racine d:\, j'ai le même vidage aléatoire (soit les fichiers sont bien modifié soit ils sont vidé: tout l'un ou tout l'autre meme sans reboot)

    If InStr(1, LCase(strText), LCase(strOldText), vbTextCompare) > 0 Then n'a pas eu d'effet.

    sinon je touche le fond: j'ai fait un script qui renome mon proxy-IE.reg en proxy-IE, passe le replace.vbs et renomme avec le .reg.
    même souci: aléatoirement sa vide ou sa marche....

    dans mes recherche je vois avec notepad++ que les reg sont encode en UC-2 Little Endian.
    les js sont en ANSI.

    au passage du script lors d'un vidage le reg ce retrouve en ANSI.
    un reg que je modifie en ANSI n'a plus le problème de vidage mais perd l'information d'encodage (dans notepad++ Encoding: plus rien n'est coché)
    Le fichier fonctionne toujours: la base de registre recoit bien l'information de modification de cle. (elle est bien modifiée.)

  10. #10
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Est-il possible de modifier le code de sorte d'avoir une commande du type: et ça je sais pas faire:
    cscript encodeToAnsi.vbs "C:\Windows\SysWOW64\GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-IE.reg"

    de manière a être chirurgical sur la conversion des fichiers reg de GPO en cas de nouveau besoins de modification.


    Code à modifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        ' Convert Unicode to Ascii
        Const ForReading = 1, ForWriting = 2, ForAppending = 8
        Const ModeAscii = 0, ModeUnicode = -1
        Dim fso, f_in, f_out
        Set fso = CreateObject("Scripting.FileSystemObject" )
        Set f_in = fso.OpenTextFile("variable.reg", ForReading,, ModeUnicode) '<-----------------------
        Set f_out = fso.OpenTextFile("variable.reg", ForWriting, true, ModeAscii) '<-------------------                  
        Do Until f_in.AtEndOfStream
        f_out.Write f_in.Read(1)
        Loop
        f_in.Close
        f_out.Close

    Merci d'avance !!

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

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    On peut envisager la création d'un fichier temporaire identique au fichier à traiter sauf le nom(ou de même nom peut importe puisqu'ils sont dans 2 dossiers différents); lire le fichier temporaire pour en écrire le contenu caractère par caractère dans fichier original :
    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
      Option Explicit
     
        Const ForReading = 1, ForWriting = 2
        Const ModeAscii = 0, ModeUnicode = -1
        Dim fso, f_in, f_out, tFile, WS, tmpName
     
        f_in = Wscript.Arguments(0)
        Set WS = CreateObject("Wscript.Shell")
        Set fso = CreateObject("Scripting.FileSystemObject")
        ' Préparation du nom du fichier temporaire
        tmpName = WS.ExpandEnvironmentStrings("%Temp%") & "\Temp." & fso.GetExtensionName(f_in)
        ' Copie le fichier original dans le dossier temporaire(Temp)
        fso.CopyFile fso.GetFile(f_in).Path, tmpName, True
        ' Création de l'objet File correspondant au fichier temporaire à lire dedans
        Set tFile = fso.OpenTextFile(tmpName, ForReading, False, ModeUnicode)
        'Création de l'objet File correspondant au fichier original(Wscript.Arguments(0))
        Set f_out = fso.OpenTextFile(f_in, ForWriting, true, ModeAscii)
        ' Copie cararctère par caractère de source à cible
        Do Until tFile.AtEndOfStream
           f_out.Write tFile.Read(1)
        Loop
        ' Ferme le fichier temporaire puis le supprime
        tFile.Close 
        fso.GetFile(tmpName).Delete True
        ' Ferme le fichier de sortie
        f_out.Close
        ' Nettoyage :
        Set tFile = Nothing
        Set f_out = Nothing
        Set fso = Nothing
    MAIS ATTENTION : La 1ère exécution se passe normalement, à la 2ème une erreur se produit(Argument ou appel de procédure incorrect) car le fichier a déjà était transformé.
    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

  12. #12
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    ton script me parait niquel !

    Par contre les fichiers ne passe pas en ANSI mais en UTF-8 without BOM.
    par ailleur, dans mon kix ce qui suit fonctionne avec mes 7 reg x64:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if exist ("C:\Windows\SysWOW64\GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-ldc.reg")
    	SHELL '%COMSPEC% /c cscript "@SCRIPTDIR\convertToAnsi.vbs" "C:\Windows\SysWOW64\GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-IE.reg"'
    	SHELL '%COMSPEC% /c cscript "@SCRIPTDIR\replace.vbs" "C:\Windows\SysWOW64\GroupPolicy\User\Scripts\Logon\ScriptCommun\IE\proxy-IE.reg" "$acceuilori" "$newacceuil"'
    si je met au bout les fichiers x86 (donc encore 7 fichiers) j'ai un message et tout est vidé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    D:\calliope\replaceEtConvert\convertToAnsi.vbs(20, 8) Erreur d'exécution Microso
    ft VBScript: Argument ou appel de procédure incorrect
     
    Microsoft (R) Windows Script Host Version 5.8
    Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.
     
    D:\calliope\replaceEtConvert\replace.vbs(14, 1) Erreur d'exécution Microsoft VBS
    cript: L'entrée dépasse la fin du fichier
     
    Microsoft (R) Windows Script Host Version 5.8
    Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.
    j'ai fais un test OS et je contourne.

    par ailleur en cas de retour arrière; l'inversement des champs vide aussi le fichier car le fichier a perdu tout information d'encodage; peut on lui en reatribué :
    (la je sais j'abuse, mais c'est de la curiosité)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ' Création de l'objet File correspondant au fichier temporaire à lire dedans
        Set tFile = fso.OpenTextFile(tmpName, ForReading, False, ModeAscii)
        'Création de l'objet File correspondant au fichier original(Wscript.Arguments(0))
        Set f_out = fso.OpenTextFile(f_in, ForWriting, true, ModeUnicode)

  13. #13
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    definitivement un .reg ne se modifie pas comme sa:

    avec notepad++ : convert to ansi;
    une fois copié a sa place il revient en UTF8....

    fin du debat, je fais un copy...

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

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    L'entrée dépasse la fin du fichier
    Cela veut dire que le fichier est vide
    Erreur à la ligne 20 : Voir la remarque que j'ai formulée à la fin de mon dernier post.

    Pour palier à cette erreur, j'ai amélioré le script de manière à ce qu'il prévienne que le fichier en cours a été traité :
    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
    Option Explicit
        Const ForReading = 1, ForWriting = 2
        Const ModeAscii = 0, ModeUnicode = -1
        Dim fso, f_in, f_out, tFile, WS, tmpName, temoin, fName, tmpFold
     
        f_in = Wscript.Arguments(0)
        Set WS = CreateObject("Wscript.Shell")
        Set fso = CreateObject("Scripting.FileSystemObject")
     
        ' Préparation du nom du fichier temporaire
        tmpFold = WS.ExpandEnvironmentStrings("%Temp%")
        tmpName = tmpFold & "\Temp." & fso.GetExtensionName(f_in)
        fName = tmpFold & "\" & fso.GetBaseName(f_in) & ".enc"
        ' Vérifie si le fichier témoin existe
        If fso.FileExists(fName) Then 
            MsgBox "Le fichier " & vbNewLine & f_in & vbNewLine & " a déjà été traité"
            Wscript.Quit
        End If
        ' Copie le fichier original dans le dossier temporaire(Temp)
        fso.CopyFile fso.GetFile(f_in).Path, tmpName, True
        ' Création de l'objet File correspondant au fichier temporaire à lire dedans
        Set tFile = fso.OpenTextFile(tmpName, ForReading, False, ModeUnicode)
        'Création de l'objet File correspondant au fichier original(Wscript.Arguments(0))
        Set f_out = fso.OpenTextFile(f_in, ForWriting, true, ModeAscii)
        ' Copie cararctère par caractère de source à cible
        Do Until tFile.AtEndOfStream
           f_out.Write tFile.Read(1)
        Loop
        ' Le traitement s'est bien déroulé, on crée dans le dossier Temp
        ' un fichier témoin vide (ayant l'extension enc évoquant encoded) puis on le ferme
        Set temoin = fso.OpenTextFile( fName, ForWriting, True)
        temoin.Close
        ' Ferme le fichier temporaire puis le supprime
        tFile.Close 
        fso.GetFile(tmpName).Delete True
        ' Ferme le fichier de sortie
        f_out.Close
        ' Nettoyage :
        Set tFile = Nothing
        Set f_out = Nothing
        Set fso = Nothing
    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

  15. #15
    Membre à l'essai
    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
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup du suivi.

+ 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