Astase.com

Astase.com Compiling the future...

Vous n'êtes pas identifié.

Annonce

Avant toute chose, merci de lire les règles des forums. Merci

#1 2005-07-19 18:29:00

sidarus
Modérateur
Lieu: Suisse
Date d'inscription: 2004-08-31
Messages: 376
Site web

[HowTo] Où se cachent les %variable% ?

1) Variables d'environnement (NT)
Dans les versions antérieures à NT les variables d'environnement étaient stockées dans un fichier et depuis dans la BdR (Registre). Ici je vais m'attarder aux variables des systèmes NT.

Pour modifier une variable on a au choix :
· la commande SET,
· la commande REG,
· ou la BdR interfacée (Poste de travail > Propriétés > Avancé > Variables d'environnement :: Utilisateur | Système).
Les variables d'environnement se déclinent sous 2 types :
· Système :: valable quelque soit le %username% (=AllUsers)
· Utilisateur :: valable uniquement pour le %username% (=CurrentUser)
a) Variables Utilisateur
HKCUEnvironment

Code:

Nom                     Type            Données
---------------------   -------------   ----------------------------------------
Path                    REG_SZ          c:bath
TEMP                    REG_EXPAND_SZ   %USERPROFILE%Local SettingsTemp
TMP                     REG_EXPAND_SZ   %USERPROFILE%Local SettingsTemp

b) Variables Système
HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment

Code:

Nom                     Type            Données
---------------------   -------------   ---------------------------------------
ComSpec                 REG_EXPAND_SZ   %SystemRoot%system32cmd.exe
FP_NO_HOST_CHECK        REG_SZ          NO
NUMBER_OF_PROCESSORS    REG_SZ          1
OS                      REG_SZ          Windows_NT
Path                    REG_EXPAND_SZ   %SystemRoot%system32;%SystemRoot%;
PATHEXT                 REG_SZ          .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE  REG_SZ          x86
PROCESSOR_IDENTIFIER    REG_SZ          x86 Family 15 Model 2 Stepping 4, GenuineIntel
PROCESSOR_LEVEL         REG_SZ          15
PROCESSOR_REVISION      REG_SZ          0204
TEMP                    REG_EXPAND_SZ   %SystemRoot%TEMP
TMP                     REG_EXPAND_SZ   %SystemRoot%TEMP
windir                  REG_EXPAND_SZ   %SystemRoot%

Remarque : les %variable_utilisateur% sont prioritaires aux %variable_système%. De plus une variable peut figuré de part et d'autre. Il en résulte une surcharge/concaténation comme on peut l'observer avec %PATH% : path=%SystemRoot%system32;%SystemRoot%;c:batch

2) Variables d'environement de CMD.exe
Comme vous pouvez le constater, SET contient la liste des %variables_utilisateur% et %variables_système%, et bien d'autres. Vous pourrez également constater que toutes ces variables ne sont pas regroupée au meme endroit dans la BdR mais éparpillées un peu partout. On peut etre amené à faire appel à ces variable grace à REG d'où l'importance de connaitre l'emplacement de ces variables dans la BdR.

Code:

Clé                     Variable               Données
-------------------------------------------------------------------------------------------------
HKCU
+---Environment
|                       TEMP                   %USERPROFILE%Local SettingsTemp
|                       TMP                    %USERPROFILE%Local SettingsTemp
+---Software
|   ---Microsoft
|       ---Windows
|           ---CurrentVersion
|               ---User Shell Folders
|                       AppData                %USERPROFILE%Application Data
|                       CommonProgramFiles     %ProgramFiles%Fichiers communs
|                       ProgramFiles           %ProgramFiles%
---Volatile Environment
                        ClientName             Console
                        HomeDrive              C:
                        HomePath               %USERPROFILE%
                        LogonServer            \CYBER01
                        SessionName            Console
HKLM
+---SOFTWARE
|   ---Microsoft
|       ---Windows NT
|           ---CurrentVersion
|               |       SystemRoot             C:WINDOWS
|               ---Winlogon
|                       ComputerName           CYBER01
|                       UserName               sid
---SYSTEM
    ---CurrentControlSet
        ---Control
            ---Session Manager
                ---Environment
                        ComSpec                %SystemRoot%system32cmd.exe
                        FP_NO_HOST_CHECK       NO
                        NUMBER_OF_PROCESSORS   1
                        OS                     Windows_NT
                        Path                   %SystemRoot%;%SystemRoot%system32;
                        PathExt                .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
                        PROCESSOR_ARCHITECTURE x86
                        PROCESSOR_IDENTIFIER   x86 Family 15 Model 2 Stepping 4, GenuineIntel
                        PROCESSOR_LEVEL        15
                        PROCESSOR_REVISION     0204
                        WinDir                 %SystemRoot%
-------------------------------------------------------------------------------------------------
?                       AllUsersProfile        C:Documents and SettingsAll Users
?                       LANG                   FR
?                       PROMPT                 $P$G
?                       SystemDrive            C:
?                       UserDomain             CYBER01
?                       UserProfile            C:Documents and Settings%UserName%

3) Variables des Dossiers Sytème
Les dossiers système, tel que Mes document, sont également définit par la BdR. Les voici :
HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders
HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders

Code:

AppData               %USERPROFILE%Application Data
Cache                 %USERPROFILE%Local SettingsTemporary Internet Files
CD Burning            %USERPROFILE%Local SettingsApplication DataMicrosoftCD Burning
Cookies               %USERPROFILE%Cookies
Desktop               %USERPROFILE%Bureau
Favorites             %USERPROFILE%Favoris
Fonts                 %SYSTEMROOT%Fonts
History               %USERPROFILE%Local SettingsHistorique
Local AppData         %USERPROFILE%Local SettingsApplication Data
Local Settings        %USERPROFILE%Local Settings
My Music              %USERPROFILE%Mes documentsMa musique
My Pictures           %USERPROFILE%Mes documentsMes images
My Video              %USERPROFILE%Mes documentsMes vidéos
NetHood               %USERPROFILE%Voisinage réseau
Personal              %USERPROFILE%Mes documents
PrintHood             %USERPROFILE%Voisinage d'impression
Programs              %USERPROFILE%Menu DémarrerProgrammes
Recent                %USERPROFILE%Recent
SendTo                %USERPROFILE%SendTo
Start Menu            %USERPROFILE%Menu Démarrer
Startup               %USERPROFILE%Menu DémarrerProgrammesDémarrage
Templates             %USERPROFILE%Modèles

Pour compléter la liste des Dossiers Système, voici un récapitulatif :

Code:

%HomeDrive%           C:
%HomePath%            C:Documents and Settings%UserName%
%ProgramFiles%        C:Program Files
%CommonProgramFiles%  C:Program FilesFichiers communs
%UserProfile%         C:Documents and Settings%UserName%
%SystemDrive%         C:
%SystemRoot%          C:WINDOWS
%WinDir%              C:WINDOWS
%Temp%                C:Documents and Settings%UserName%Local SettingsTemp
%Tmp%                 C:Documents and Settings%UserName%Local SettingsTemp

Code:

C:                           %HomeDrive% | %SystemDrive%
+---Documents and Settings
|   ---%UserName%            %HomePath% | %UserProfile%
|       ---Local Settings
|           ---Temp          %Temp% | %Tmp%
+---Program Files             %ProgramFiles%
|   ---Fichiers communs      %CommonProgramFiles%
---Windows                   %SystemRoot% | %WinDir%

Bon code wink

Hors ligne

 

#2 2005-12-04 20:36:53

tlem
Moderateur
Lieu: Bordeaux
Date d'inscription: 2004-01-16
Messages: 1554
Site web

Re: [HowTo] Où se cachent les %variable% ?

A rajouter aussi, la manipulation des variables, pour pouvoir en retirez ce que l'on veut.

Extrait de l'aide de la commande FOR :

Code:

    %~I         - étend %I en supprimant les guillemets (")
    %~fI        - étend %I en nom de chemin d'accès reconnu
    %~dI        - étend %I en lettre de lecteur uniquement
    %~pI        - étend %I en chemin d'accès uniquement
    %~nI        - étend %I en nom de fichier uniquement
    %~xI        - étend %I en extension de fichier uniquement
    %~sI        - chemin étendu contenant uniquement des noms courts
    %~aI        - étend %I en attributs du fichier
    %~tI        - étend %I en date/heure du fichier
    %~zI        - étend %I en taille du fichier
    %~$PATH:I   - parcourt les répertoires de la variable
                   d'environnement PATH et étend %I en nom du
                   premier fichier reconnu trouvé. Si le nom de la
                   variable d'environnement n'est pas défini ou
                   que le fichier n'est pas trouvé par la recherche,
                   alors ce modificateur étend en chaîne vide

Vous pouvez combiner les modificateurs pour obtenir des résultats composés :

    %~dpI       - étend %I en lettre de lecteur et chemin d'accès uniquement
    %~nxI       - étend %I en nom de fichier et extension uniquement
    %~fsI       - étend %I en nom de chemin complet avec noms courts
                   uniquement
    %~dp$PATH:i - parcourt les répertoires listés dans la variable
                   d'environnement PATH à la recherche de %I et étend
                   en lettre de lecteur du premier trouvé.
    %~ftzaI     - étend %I en DIR comme ligne en sortie

Pour plus d'infos, tapez FOR /? dans une ligne de commande.

%I est une variable quelconque utilisée dans une boucle de vos batch (Ca peut etre aussi %a %b, ... ou n'importe quelle autres variables).

Le fait d'étendre la variable, permet de récupérer l'élément demander de la variable.

Explication spéciale pour SeedBatch :

- Si %I est égal à un chemin d'accés avec guillemet, alors %~I renvois ce meme chemin d'accés mais sans les guillemets (Utile si on doit rajouter des sous répertoires).

- Si %I est égal à C:Program Files7-Zip7z.exe alors %~nI te renverra 7z.exe seulement.


Pour pouvoir extraire seulement quelques informations d'une variable quelconque, on utilisera plutot ceci :

Extrait de l'aide de la commande SET.

Code:

Vous pouvez aussi spécifier des sous-chaînes pour une expression.

    %PATH:~10,5%

développe la variable d'environnement PATH et utilise seulement 5
caractères à partir du onzième (décalage de 10)  dans le résultat sous forme
développée. Si la longueur n'est pas spécifiée, tout le reste de la valeur
de la variable est traité. Si l'une des valeurs (décalage ou longueur)
est négative, alors le nombre utilisé est la longueur de la valeur de la
variable d'environnement ajoutée au décalage ou à la longueur donné.

    %PATH:~-10%

extrait les 10 derniers caractères de la variable PATH.

    %PATH:~0,-2%

extrait tous les caractères sauf les deux derniers de la variable PATH.

Déja expliquer par Sid ici : http://www.astase.com/forums/viewtopic.php?p=8171#8171

Bon code à tous  wink


Besoin de faire des traitements plus complexes que le batch, ou d'une interface graphique, venez tenter AutoIt.

Salutations        • Règles du forum     • Recherche du Forums
Thierry

Hors ligne

 

#3 2006-02-09 12:47:50

Pascale73
Modérateur
Lieu: CHAMBERY
Date d'inscription: 2005-11-02
Messages: 127

Re: [HowTo] Où se cachent les %variable% ?

En complément des posts précédents, on peut ajouter ceci au sujet des manipulation des variables définies dans un batch

Exemple de création de variable : Nous souhaitons définir une variable mesdoc contenant c:Mes Documents Nous allons écrire dans un Batch :

Set mesdoc=c:Mes Documents
Echo Le r‚pertoire de travail est %mesdoc% .

Ajout de caractères

Vous avez associé à mesdoc la chaîne c:Mes Documents. Imaginons que vous souhaitiez ajouter travail à la fin de la chaîne afin que la variable contienne à un certain moment c:Mes Documentstravail

La première solution est simple : il faut redéfinir entièrement la variable dans le batch, sous forme, par exemple :

Set mesdoc=c:Mes Documentstravail

Il y a-t il une solution plus élégante, et plus pratique, vous pouvez entrer :

Set mesdoc=%mesdoc%travail

Pour CMD, c’est simple : %mesdoc% sera remplacée par sa valeur (rappelez-vous qu’elle contient déjà des données, en l’occurrence Set mesdoc= c:Mes Documents) avant que la ligne soit exécutée. Cela donnera donc :

Set mesdoc=c:Mes Documentstravail

Cela a le grand avantage de fonctionner quel que soit le contenu de la variable. Par exemple, pour ajouter un chemin à cette liste des path, il suffit de taper :

Set path=%path%;c:mon_chemin


Suppression d’une variable

De la même manière que SET x=y définit la variable x avec le contenu y, on peut être amené à vouloir détruire une variable (ce qui détruira naturellement sa valeur associée).Il suffit d’utiliser SET sous cette forme :

Set NomDeVariable=

Par exemple, pour supprimer de la mémoire la variable mesdoc, on tapera : Set mesdoc=


La substitution de la variable

Il est possible de modifier une variable en additionnant, remplaçant ou supprimant toute sorte de caractères. C’est ce qu’on appelle le transtypage. Il faut l’utiliser de la manière suivante :

Set variable=%variable:ch1=ch2%

Cette possibilité est très importante et indispensable à connaître pour écrire des scripts ne serai-ce que pour enlever de des " par exemple.

Set variable=”c:Mes Documents”
Echo %variable%
Set variable=%variable:”=%
Echo %variable%

Dans l’exemple qui précède, la variable est "c:Mes Documents" la première fois, tandis que la seconde c’est c:Mes Documents sans les ".
Il est possible de faire tout ce qu’on veut de cette manière :

Set variable=c:Mes Documents
Set variable=%variable:c:big_smile:%
Set variable=%variable:=/%
Set variable=%variable:ume=UME%
Echo %variable%

On obtiendra pour la variable : D:Mes Documents puis D:/Mes Documents  et enfin D:/Mes DocUMEnts.

Utilisation plus marginale : Il est possible d’utiliser un * en début de chaîne et en voici un exemple :
Set variable=%path%
Set variable:%*windows=toto%

Dans le 1er exemple on a :
C:Program FilesWindows Resource KitsTools;C:WINDOWSsystem32;
C:WINDOWS;C:WINDOWSSystem32Wbem;C:Program FilesSupport Tools

Et dans le second :
toto Resource KitsTools;C:WINDOWSsystem32;
C:WINDOWS;C:WINDOWSSystem32Wbem;C:Program FilesSupport Tools

ATTENTION, il est important de souligner en conclusion que la casse, c’est-à-dire la différence majuscules/minuscules n’est pas discriminatoire pour CMD : il considère par exemple la variable Abc et aBC comme identiques.
Par contre, il est sensible à la casse du contenu des variables. C’est-à-dire que lorsque vous aurez à tester le contenu d’une variable : si cette variable se nomme par exemple Nom et contient toto, l’interpréteur de commandes détectera une différence si le test se porte sur TOTO puisque le premier est en minuscules et le second en majuscules.

Hors ligne

 

#4 2006-07-06 17:42:49

sidarus
Modérateur
Lieu: Suisse
Date d'inscription: 2004-08-31
Messages: 376
Site web

Re: [HowTo] Où se cachent les %variable% ?

Merci pour vos contributions dans ce thread. Clair qu'il y a pas mal de chose à dire dans ce domaine.

Hors ligne

 

Pied de page des forums

Astase.com Compiling the future...