scripts (cmd) et variables
Le
moi

bonjour,
Je tente de me faire un résumé des possibilités existentes
concernant la manipulation des variables
car j'ai tendance à oublier ce que j'utilise peu
J'ai beaucoup de difficulités à trouver l'aide "en ligne"
Car l'info est parfois dispo dans des endroits innatendus
J'arrive à ce qui suit mais il me semble qu'il en manque
J'attends donc vos précisions et commentaires
Merci d'avance,
HB
==
1. Lorsqu'une variable Machin
contient le chemin complet d'un fichier
%~Machin Supprime les guillemets éventuels (")
qui encadraient le chemin.
%~fMachin Chemin complet + Nom
%~dMachin Lettre de lecteur
%~pMachin Chemin d'accès
(sans la lettre du lecteur ; finit par « » )
%~nMachin Nom de fichier
%~xMachin Extension du fichier (avec le point)
%~sMachin Chemin avec des noms courts
%~aMachin Attributs du fichier
%~tMachin Date/heure du fichier
%~zMachin Taille du fichier en octets
et on peut cumuler :
%~dpMachin chemin d'accès avec lecteur
%~nxMachin Nom de fichier et extension
%~fsMachin chemin complet avec noms courts
%~ftzaMachin comme un DIR
Ex. :
Si %1 contient
C:Documents and SettingsAll Userstuser.dat
syntaxe Chaine retournée
%~dp1 C:Documents and SettingsAll Users
%~n1 ntuser
%~x1 .dat
%~nx1 ntuser.dat
%~d1 C:
%~p1 Documents and SettingsAll Users
%~z1 262144 ( ou une autre taille)
%~a1 --a
%~t1 13/01/2005 17:56 (ou une autre date )
%~fs1 C:DOCUME~1ALLUSE~1tuser.dat
2. Extraction d'une partie du contenu d'une variable Machin
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
%Machin:~0,2% Retourne les deux premiers caractères
%Machin:~5,3% Retourne trois caractères en partant du sixième
%Machin:~8% Retourne tout les caractères à partir du neuvième
%Machin:~2,-4% Retourne tout les caractères à partir du troisième
sauf les quatre derniers
%Machin:-7% Retourne les sept derniers caractères
Par exemple :
%date:~6,4%-%date:~3,2%-%date:~0,2%
Retourne la date sous la forme aaaa-mm-jj
3. Transformation du contenu d'une variable Machin
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
%Machin:ch1=ch2% balaye Machin à la recherche de ch1
et remplace chaque ch1 trouvé
par ch2
Exemples
%path:windows=VinDo%
Remplace chaque occurrence de « windows »
par « VinDo » dans la variable PATH
et retourne le résultat.
%date:/=-%
Retourne la date sous la forme jj-mm-aaaa
Je tente de me faire un résumé des possibilités existentes
concernant la manipulation des variables
car j'ai tendance à oublier ce que j'utilise peu
J'ai beaucoup de difficulités à trouver l'aide "en ligne"
Car l'info est parfois dispo dans des endroits innatendus
J'arrive à ce qui suit mais il me semble qu'il en manque
J'attends donc vos précisions et commentaires
Merci d'avance,
HB
==
1. Lorsqu'une variable Machin
contient le chemin complet d'un fichier
%~Machin Supprime les guillemets éventuels (")
qui encadraient le chemin.
%~fMachin Chemin complet + Nom
%~dMachin Lettre de lecteur
%~pMachin Chemin d'accès
(sans la lettre du lecteur ; finit par « » )
%~nMachin Nom de fichier
%~xMachin Extension du fichier (avec le point)
%~sMachin Chemin avec des noms courts
%~aMachin Attributs du fichier
%~tMachin Date/heure du fichier
%~zMachin Taille du fichier en octets
et on peut cumuler :
%~dpMachin chemin d'accès avec lecteur
%~nxMachin Nom de fichier et extension
%~fsMachin chemin complet avec noms courts
%~ftzaMachin comme un DIR
Ex. :
Si %1 contient
C:Documents and SettingsAll Userstuser.dat
syntaxe Chaine retournée
%~dp1 C:Documents and SettingsAll Users
%~n1 ntuser
%~x1 .dat
%~nx1 ntuser.dat
%~d1 C:
%~p1 Documents and SettingsAll Users
%~z1 262144 ( ou une autre taille)
%~a1 --a
%~t1 13/01/2005 17:56 (ou une autre date )
%~fs1 C:DOCUME~1ALLUSE~1tuser.dat
2. Extraction d'une partie du contenu d'une variable Machin
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
%Machin:~0,2% Retourne les deux premiers caractères
%Machin:~5,3% Retourne trois caractères en partant du sixième
%Machin:~8% Retourne tout les caractères à partir du neuvième
%Machin:~2,-4% Retourne tout les caractères à partir du troisième
sauf les quatre derniers
%Machin:-7% Retourne les sept derniers caractères
Par exemple :
%date:~6,4%-%date:~3,2%-%date:~0,2%
Retourne la date sous la forme aaaa-mm-jj
3. Transformation du contenu d'une variable Machin
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
%Machin:ch1=ch2% balaye Machin à la recherche de ch1
et remplace chaque ch1 trouvé
par ch2
Exemples
%path:windows=VinDo%
Remplace chaque occurrence de « windows »
par « VinDo » dans la variable PATH
et retourne le résultat.
%date:/=-%
Retourne la date sous la forme jj-mm-aaaa
en tappant trop vite :
^^^
----------------->>>>> et d'une ...
et s'en excuse ...
HB
Excellent résumé, et bien pratique.
Tu pourrais peut-être ajouter les calculs (SET /A) ; voir SET /? pour
les détails ; mais, sans oublier l'octal ;o)))
Et, peut-être, mentionner les variables pré-définies avec l'expansion
retardée :
%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION%
%CMDCMDLINE%
@-salutations
--
Michel Claveau
Remplacer "expansion retardée" par "extension de commande"
Merci.
--
MCI
C'est pour moi l'octal ?
lol
Petit résumé bien pratique ...
Méta-MCI (MVP) wrote:
Merci
Dois-je comprend qu'en dehors des choses
citées plus bas, je n'ai rien omis d'important ?
une partie 4. pour les variables numériques
( et donc Set /a ) est effectivement prévue
(.... il faut bien reconnaitre que
peu de gens utilisent l'octal ... et moi même ...)
Oui... Je ne les trouve pas toutes indispensables
mais cd, date, time et errorlevel
servent assez souvent.
En revanche, je compte faire une petite partie avec un ou deux
exemples sur l'expansion retardée qui reste un truc puissant quand on
arrive à le contrôler ;o)
et une autre sur setlocal / endlocal
mais j'avoue que je suis rapidement " à mes limites" ;o(
lorsque je veux trouver des exemples pertinents ...
A+
HB
moi wrote:
Suite ... :
J'ai deux questions :
1. Pour "For /F ..."
dans une ligne du type
For /F "skip=1 tokens=2 delims=:" %%u in (%CH%) do (
)
Si CH contient le nom d'un fichier ça balaye bien son contenu
Mais l'aide (for /?) laisse entendre que l'on peut cibler plusieurs
fichiers
J'ai tenté avec "fichier*.txt"
pour des fichiers numérotés... mais j'échoue ...
Qu'en est-il réellement ?
Qu'ai-je raté ?
2. L'aide de for présente aussi une forme de syntaxe
%~$Variable:i dont je ne saisi ni le but ni le sens ...
où i est une variable de la boucle for
mais peut-être est-ce utilisable hors de ce contexte ?
Merci d'avance,
HB
Les ensembles de fichiers, ne sont pas valable avec FOR /F
Et, avec un FOR sans /F , le travail est effectué sur le nom des
fichiers, au lieu du contenu d'un fichier.
Pour %~$PATH:i c'est un peu spécial. Il faut que la variable (%i)
contienne un nom de fichier, et l'autre variable, une liste de
répertoires, se terminant par et séparés par un point-virgule.
L'exécution du batch va chercher le fichier (par son nom), dans les
répertoires de la liste. Il s'arrête au premier trouvé, et retourne le
chemin, suivi du nom du fichier.
Un 'chti exemple :
@echo off
setlocal
call :SUB help.jpg
call :SUB wusa.exe
endlocal
goto :EOF
:SUB
set MREP=D:Downloads;C:temp;C:Windowssystem32;D;dev;
echo %~$MREP:1
goto :EOF
Si le fichier n'est pas trouvé, on récupère du vide...
@+
--
Michel Claveau
Par "ensembles de fichiers", je voulais dire "ensembles de fichiers par
des caractères génériques".
@+
MCI
Méta-MCI (MVP) wrote:
OK
L'aide de for dit (entre autres !) :
-------------------CITATION-------------------
FOR /F ["options"] %Lettre IN (ensemble-fichiers) DO commande [params]
FOR /F ["options"] %Lettre IN ("chaîne") DO commande [params]
FOR /F ["options"] %Lettre IN ('commande') DO commande [params]
ensemble-fichiers est un ou plusieurs noms de fichiers. Chaque
fichier est
ouvert, lu et traité avant de passer au fichier suivant de
ensemble-fichiers(...)
------------- fin de citation -------------------------
J'en déduis que "ensemble-fichiers" est une liste de fichiers
(séparés par des point-virgules comme d'hab ?)
et non pas un "descripteur" avec "?" et/ou "*"
J'ai bon cette fois ?
effectivement ... le qualificatif "spécial" est assez adapté !
J'entrevois même l'utilité de cette chose ... c'est dire
euh ...
... pour rechercher un fichier
dans une série d'endroits ...
Je vais tester pour vérifier que j'ai compris ;o))))
Merci beaucoup pour ces précisions
HB
J'ai testé ...
Pour %~$LISTE:a
cela ne semble fonctionner que quand %a
est dans le corps d'un FOR ...
( et comme c'est %%a dans un *.bat
cela donne %%~$LISTE:a )
Merci,
A+