Page 1 sur 1

[Func] _GetExpandFullPath()

Posté : jeu. 17 nov. 2011 10:18
par TopXm
Bonjour,

J'ai fait une petite fonction se nomme _GetExpandFullPath() et qui permet de traduire les macros autoit (Exemple : @DesktopDir) et autres variables d'environnement dans un chemin de fichier (une chaîne en fait), ça,se trouve ça existe déjà et je suis passé à côté :?

Les paramètres :
  1. = Chemin du fichier (Ex : %ProgramFiles%\MonDossier\MonFichier.txt)
  2. = Mode :
    1. = Traduction des @Macros et %EnvVar
    2. = Traduction des @Macros@ et %EnvVar% (Par défaut)
  3. = Méthode :
    1. = Ne traduit que les variables d'environnement
    2. = Ne traduit que les macros
    3. = Traduit macros et variables d'environnement
La valeur retournée est le chemin (traduit ou pas) si les paramètres passés sont bons sinon :
  • @Error = 1 Quand le Chemin du fichier est à blanc
  • @Error = 2 Quand $iMode n'est pas un valeur valide (1:2)
  • @Error = 3 Quand $iMethod n'est pas une valeur valide (1:3)
Je me suis très largement inspirée de ce post :
=> http://www.autoitscript.com/forum/topic ... ntry446159

Je me permet donc de vous solliciter pour avis sur les manques / modifications pouvant être apportées à la fonction :)
► Afficher le texte_GetExpandFullPath()
Merci d'avance

Re: [Func] _GetExpandFullPath()

Posté : jeu. 17 nov. 2011 11:38
par Tlem
Vous serait-il possible de donner un cas concret de l'utilité de cette fonction ?
Car là, en l'état, je ne vois pas.

Re: [Func] _GetExpandFullPath()

Posté : jeu. 17 nov. 2011 21:15
par TopXm
Bonsoir :)
Tlem a écrit :Car là, en l'état, je ne vois pas.
En fait je cherche à traduire certaines variables/macros à travers un script.

Le but final étant de corriger certains problème sur Vista, style ça : http://www.vista-xp.fr/forum/topic7793.html#p64105

Du coup mon admin(ette) prépare son zip et créée un script qui pourra être utilisé par "l'helpé" et qui ressemble à ça

Code : Tout sélectionner

[Autorisations]
C:\Windows\Winsxs\Manifests       ;Définir les autorisations
C:\Windows\Servicing\Packages   

[ZipGet]                                         ;Permet de télécharger le fichier zip du serveur au PC de l'helpé
telechargements\Manifests.zip       
[unzip]                                           ;Dezippe le contenu du dossier Manifest du ZIP
Manifests\*.*
[UnzipFolder]
@Systemdir\                               ;directement dans le dossier concerné

[ZipGet]
telechargements\Packages.zip
 
Du coup je dois lire le script et interpréter les variables d'environnements / macros :?

C'est pas très clair mes histoires ... Mais cependant c'est à ça que me sert la fonction :)

Re: [Func] _GetExpandFullPath()

Posté : mer. 23 nov. 2011 17:31
par TommyDDR
J'ai aussi eu besoin de transformer les %xxx% d'un chemin en leurs significations, je n'avais pas vu ton post mais j'ai fait... un poil plus court :
► Afficher le textecode
@Tlem : On peut en avoir besoin quand on lis une clé de registre et que celle-ci nous renvoie une valeur du style : "%SystemRoot%\System32\shell32.dll".

Un FileExists nous dira que le fichier n'existe pas ^^.

Re: [Func] _GetExpandFullPath()

Posté : mer. 23 nov. 2011 18:15
par TopXm
Hello TommyDDR :)

J'étais aussi parti sur EnvGet au départ mais ça ne réglait pas mon souci initial

Je voulais que mes scripts pré-rédigés n'aient pas besoin d'être modifiés selon l'helpé.

Avec @DesktopDir pas la peine de connaître le nom de l'user ni savoir s'il a XP ou plus récent, @desktopDir ça marche pour tout le monde :D

Bon en même temps, j'avoue que mettre des @DesktopDir (par exemple) dans des scripts, c'est peut-être un peu tordu comme idée :?

Re: [Func] _GetExpandFullPath()

Posté : mer. 23 nov. 2011 22:28
par Tlem
@TommyDDR
On peut encore simplifier :
► Afficher le texte
@TopXm
Idem pour votre fonction. Si le but est d'interpréter les variables d’environnement ainsi que les macros, je doute qu'ont ait réellement besoin de séparer les interprétations ! Et dans ce cas, ceci convient largement (au pire cela vous donnera des idées pour améliorer votre fonction) :
► Afficher le texte

Re: [Func] _GetExpandFullPath()

Posté : jeu. 24 nov. 2011 08:40
par TommyDDR
Ah, pas mal, merci Tlem ;)

Re: [Func] _GetExpandFullPath()

Posté : jeu. 24 nov. 2011 12:27
par TopXm
Bonjour :)
Tlem a écrit :@TopXm
Idem pour votre fonction. Si le but est d'interpréter les variables d’environnement ainsi que les macros, je doute qu'ont ait réellement besoin de séparer les interprétations ! Et dans ce cas, ceci convient largement (au pire cela vous donnera des idées pour améliorer votre fonction) :
C'est impec comme cela merci :)

Du coup, je l'ai utilisée pour traduire les différentes commandes DOS que je suis susceptible de trouver dans les scripts, ce qui donne
► Afficher le texteExpandCommandLine
La fonction _GetFullCommandLine est sans doute "optimisable", quoiqu'il en soit cela fonctionne et j'ai même capté les StringRegExpReplace :lol:

Un grand merci à vous deux :!:

Re: [Func] _GetExpandFullPath()

Posté : mer. 18 janv. 2012 16:04
par TommyDDR
En parlant de ExpandEnvStrings, pourquoi ExpandVarStrings ne marche pas de la même façon (ne marche pas du tout ?) ?

Ce code ne fonctionne pas :
► Afficher le textecode

Re: [Func] _GetExpandFullPath()

Posté : jeu. 19 janv. 2012 09:31
par TopXm
Hello :)

Assurément le $ lui pose un problème :

Code : Tout sélectionner

; Exemples d'utilisation:
Local $Var

$Var = "\MyFolder\@UserName"
ConsoleWrite('1 :' & _GetExpandFullPath($Var) & @CRLF)
$Var = "\test @UserName"
ConsoleWrite('2 :' & _GetExpandFullPath($Var) & @CRLF)
$Var = "$test @UserName"
ConsoleWrite('3 :' & _GetExpandFullPath($Var) & @CRLF)

Func _GetExpandFullPath($Path)
    Local $Return
    Local $SetMacro = StringRegExpReplace($Path, "(@[\w]+)", "@$0@")
    Local $ExpandVarStrings = Opt("ExpandVarStrings", 1)
    $Res = $SetMacro
    Assign ("Return", $Res)
    Opt("ExpandVarStrings", $ExpandVarStrings)
    Return $Return
EndFunc
Pourquoi ? par contre je n'en sais fichtre rien :oops:

Re: [Func] _GetExpandFullPath()

Posté : lun. 23 janv. 2012 15:33
par TommyDDR
Merci pour votre réponse, étrange en effet.

Re: [Func] _GetExpandFullPath()

Posté : lun. 23 janv. 2012 16:41
par mikell
On dirair qu'une variable et une macro ne peuvent pas être gérées dans la même expression :?:

Code : Tout sélectionner

Global $test2 = "ok\"
Local $Titre = $test2 & @UserName
Local $Titre2 = ' "$test2" @UserName '

ConsoleWrite('4 :' & TransformMacroString($Titre) & @CRLF)
ConsoleWrite('5 :' & TransformMacroString($Titre) & @CRLF)

Func TransformMacroString($Texte)
    Local $opt = Opt("ExpandVarStrings", 1)
    Local $retour = $Texte
    Opt("ExpandVarStrings", $opt)
    Return $retour
EndFunc

Re: [Func] _GetExpandFullPath()

Posté : jeu. 26 janv. 2012 10:50
par TommyDDR
Pour en revenir au sujet principal...

Code : Tout sélectionner

_WinAPI_ExpandEnvironmentStrings($String)
Comme quoi ce n'est pas inutile de lire les UDFs inclus dans AutoIt ;)

Re: [Func] _GetExpandFullPath()

Posté : jeu. 26 janv. 2012 12:43
par TopXm
Hello :)
TommyDDR a écrit :Comme quoi ce n'est pas inutile de lire les UDFs inclus dans AutoIt
Oué ça le fait bien en effet :) Merci TommyDDR

Code : Tout sélectionner

#include <winapi.au3>
Local $Var= "$test %userprofile%\chupachoups"
ConsoleWrite('==>' & _WinAPI_ExpandEnvironmentStrings($Var) & @CRLF)