[Func] _GetExpandFullPath()

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

[Func] _GetExpandFullPath()

#1

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#2

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#3

Message 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 :)
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#4

Message 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 ^^.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#5

Message 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 :?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#6

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#7

Message par TommyDDR »

Ah, pas mal, merci Tlem ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#8

Message 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 :!:
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#9

Message 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
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#10

Message 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:
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#11

Message par TommyDDR »

Merci pour votre réponse, étrange en effet.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#12

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#13

Message 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 ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TopXm
Niveau 6
Niveau 6
Messages : 260
Enregistré le : mer. 25 mai 2011 16:37
Localisation : Cognac !!!
Status : Hors ligne

Re: [Func] _GetExpandFullPath()

#14

Message 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)
 
Répondre