Astase.com Compiling the future...
Vous n'êtes pas identifié.
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
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
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.
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
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 :
%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
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 ![]()
Hors ligne
A rajouter aussi, la manipulation des variables, pour pouvoir en retirez ce que l'on veut.
Extrait de l'aide de la commande FOR :
%~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.
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 ![]()
Hors ligne
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:
:%
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
Merci pour vos contributions dans ce thread. Clair qu'il y a pas mal de chose à dire dans ce domaine.
Hors ligne