Page 1 sur 1

[R] Remplacer une chaîne de caractère

Posté : ven. 07 juin 2013 11:05
par Kreg
Bonjour à tous,

Je me suis inspiré d'un script trouvé sur autoitscript.com pour manipuler diskpart.
L'objectif étant de livré à des techniciens un outil simple de création de clé USB bootable / synchronisation avec les serveurs de déploiement.
J'ai un quack sur la partie diskpart pour les OS Français, à cause de "Disque" au lieu de "Disk".

J'ai essayé avec un bête StringReplace. Mais ce n'est pas bon. Je débute ;-)
En exemple c'est plus parlant

Code : Tout sélectionner

Func DskPrt()
    Local $Menu1, $n1, $n2, $Msg, $Menustate, $Menutext, $File
    Local $Line, $Array = _StringExplode(FileRead(@TempDir & '\lstdsk.txt'), @LF)
    For $i = 0 To UBound($Array) - 1
        If StringRegExp($Array[$i], '(?i)Disk [\d]+') Or StringRegExp($Array[$i], '(?i)Disque [\d]+') Then $Line &= $Array[$i] & '|'
    Next
    $Line = StringRegExpReplace($Line, '[\s|]*$', '') 
    GUICreate('Make USB Bootable', 260, 250) 
    GUICtrlCreateLabel('Disque disponible : ', 22, 10, 100)
    $n1 = GUICtrlCreateList('', 20, 30, 215, 150)
    GUICtrlSetData(-1, $Line)
    $n2 = GUICtrlCreateButton('Selectionner le disque à rendre bootable', 28, 200, 200)
    GUICtrlSetState(-1, $GUI_FOCUS) 
    GUISetState() 

    Do
        $Msg = GUIGetMsg()
        If $Msg = $n2 Then
            Local $Disk1 = StringRegExpReplace(GUICtrlRead($n1), '(?i)^.*(Disk [\d]+).*$', '$1')
            Local $Disk= StringReplace ($Disk1, "disque", "disk")
            Local $iMsgBoxAnswer
            $iMsgBoxAnswer = MsgBox(262452, 'Le disque choisis est le suivant: ' & $Disk, 'Attention le disque va être formatté : ' & $Disk & '!')
L'objectif étant d'avoir "Le disque choisis est le suivant: Disk x" --> via la variable $Disk
Parfait sur mes OS Anglais tout fonctionne. Sur des OS Français, il indique "Le disque choisis est le suivant: disque x" Ce qui échoue le reste des actions diskpart.
Du coup j'ai rajouté

Code : Tout sélectionner

Local $Disk= StringReplace ($Disk1, "disque", "disk")
Le résultat est "Le disque choisis est le suivant: Disk x En Ligne ........" En gros il me colle trop d'informatons !? Je ne comprends pas pk.

Je pense que c'est simple, mais je bloque :)
Une idée amis autoscriptiens ?
Merci !!

Kreg

Re: [..] Remplacer une chaîne de caractère

Posté : ven. 07 juin 2013 12:20
par lesolutionneur
Sais-tu qu'un logiciel s'appelant Rufus permet de créer des clé USB bootables : pourquoi veux-tu en recréer un par toi-même ?
http://rufus.akeo.ie/

Re: [..] Remplacer une chaîne de caractère

Posté : ven. 07 juin 2013 13:57
par Kreg
lesolutionneur a écrit :Sais-tu qu'un logiciel s'appelant Rufus permet de créer des clé USB bootables : pourquoi veux-tu en recréer un par toi-même ?
http://rufus.akeo.ie/
En effet il y a Rufus, et pleins d'autres outils qui existe qui sont sympa pour la création de clé bootable.

Mon ambition n'est pas de faire un outil tel que Rufus, mais bien plus simple mais qui m'apporte surtout d'autres fonctionnalités propre à mon infra.
Synchronisation avec mes SCCM, check de la version du Master, etc...
Tout fonctionne correctement, sauf le cas de l'OS Français pour la partie rendre bootable.
La tu pourrais me répondre pourquoi des techniciens utilise des OS Français ? Malheureusement j'ai beau me demander pourquoi, je n'ai pas de réponse valable.

Re: [..] Remplacer une chaîne de caractère

Posté : ven. 07 juin 2013 16:42
par lesolutionneur
T'as dit des techniciens, pas des ingénieurs !
Sauf erreur de ma part, l'anglais n'est pas requis pour tous les techniciens :)
Mais bon là on s'écarte un peu du sujet !

(Sinon tu peux automatiser Rufus)

Re: [..] Remplacer une chaîne de caractère

Posté : ven. 07 juin 2013 22:51
par jguinch
Salut.
Peut être comme ça :

Code : Tout sélectionner

If $Msg = $n2 Then
    $disk = StringRegExpReplace( GUICtrlRead($n1), "(\s+)(Disque|Disk)(\s+)([\d])(.*)", "Disk $4")
    MsgBox(262452, 'Le disque choisis est le suivant: ' & $Disk, 'Attention le disque va être formatté : ' & $Disk & '!')
EndIf
Juste une remarque : tu pourrais peut-être améliorer un peu en n'affichant que les disques de type USB (histoire que le tech ne fasse par une boulette)...

Re: [..] Remplacer une chaîne de caractère

Posté : lun. 10 juin 2013 10:13
par Kreg
jguinchard a écrit :Salut.
Peut être comme ça :

Code : Tout sélectionner

If $Msg = $n2 Then
    $disk = StringRegExpReplace( GUICtrlRead($n1), "(\s+)(Disque|Disk)(\s+)([\d])(.*)", "Disk $4")
    MsgBox(262452, 'Le disque choisis est le suivant: ' & $Disk, 'Attention le disque va être formatté : ' & $Disk & '!')
EndIf
Juste une remarque : tu pourrais peut-être améliorer un peu en n'affichant que les disques de type USB (histoire que le tech ne fasse par une boulette)...
Hello !
Merci ça fonctionne impec :)
Excellente remarque également, autant éviter les bêtises en effet. Je vais voir comment je peux adapter mon histoire pour exclure les fixe drive.
Merci encore !

Kreg

Re: [..] Remplacer une chaîne de caractère

Posté : lun. 10 juin 2013 14:36
par jguinch
Salut.
Perso, plutôt que d'exclure les disque locaux, j'essaierais de me concentrer sur les lecteurs USB.
Comme tu le sais sans doute, on peut faire en sorte qu'un disque USB soit vu comme un disque local, donc tu risques de tomber sur ce cas de figure...

J'avais fait ça à un moment :
► Afficher le texte
N'oublie pas de passer ton sujet en résolu...