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 Settings\All Users\ntuser.dat
syntaxe Chaine retournée
%~dp1 C:\Documents and Settings\All Users\
%~n1 ntuser
%~x1 .dat
%~nx1 ntuser.dat
%~d1 C:
%~p1 \Documents and Settings\All Users\
%~z1 262144 ( ou une autre taille)
%~a1 --a------
%~t1 13/01/2005 17:56 (ou une autre date )
%~fs1 C:\DOCUME~1\ALLUSE~1\ntuser.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.
"moi" a fait pas mal de fautes en tappant trop vite :
bonjour,
Je tente de me faire un résumé des possibilités existentes
^^^ ----------------->>>>> et d'une ...
et s'en excuse ...
HB
Méta-MCI \(MVP\)
Bonsoir !
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
Bonsoir !
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%
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
MCI \(ex do ré Mi chel la si do\) [MVP]
Oups ! Remplacer "expansion retardée" par "extension de commande" Merci.
-- MCI
Oups !
Remplacer "expansion retardée" par "extension de commande"
Merci.
Oups ! Remplacer "expansion retardée" par "extension de commande" Merci.
-- MCI
---DGI972---
Méta-MCI (MVP) a écrit :
Bonsoir !
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
C'est pour moi l'octal ?
lol
Petit résumé bien pratique ...
Méta-MCI (MVP) a écrit :
Bonsoir !
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%
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
C'est pour moi l'octal ?
lol
Petit résumé bien pratique ...
moi
Bonsoir,
Méta-MCI (MVP) wrote:
Bonsoir !
Excellent résumé, et bien pratique.
Merci Dois-je comprend qu'en dehors des choses citées plus bas, je n'ai rien omis d'important ?
Tu pourrais peut-être ajouter les calculs (SET /A) ; voir SET /? pour les détails ; mais, sans oublier l'octal ;o)))
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 ...)
Et, peut-être, mentionner les variables pré-définies
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
Bonsoir,
Méta-MCI (MVP) wrote:
Bonsoir !
Excellent résumé, et bien pratique.
Merci
Dois-je comprend qu'en dehors des choses
citées plus bas, je n'ai rien omis d'important ?
Tu pourrais peut-être ajouter les calculs (SET /A) ; voir SET /?
pour
les détails ; mais, sans oublier l'octal ;o)))
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 ...)
Et, peut-être, mentionner les variables pré-définies
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 ...
Merci Dois-je comprend qu'en dehors des choses citées plus bas, je n'ai rien omis d'important ?
Tu pourrais peut-être ajouter les calculs (SET /A) ; voir SET /? pour les détails ; mais, sans oublier l'octal ;o)))
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 ...)
Et, peut-être, mentionner les variables pré-définies
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
Bonjour,
moi wrote:
bonjour,
Je tente de me faire un résumé des possibilités existantes concernant la manipulation des variables ...
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 ( <actions ...> )
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
Bonjour,
moi wrote:
bonjour,
Je tente de me faire un résumé des possibilités existantes
concernant la manipulation des variables ...
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 (
<actions ...>
)
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 ?
Je tente de me faire un résumé des possibilités existantes concernant la manipulation des variables ...
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 ( <actions ...> )
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
Méta-MCI \(MVP\)
Bonsoir !
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 :
: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
Bonsoir !
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 :
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 :
Par "ensembles de fichiers", je voulais dire "ensembles de fichiers par des caractères génériques".
@+
MCI
moi
Bonsoir,
Méta-MCI (MVP) wrote:
Les ensembles de fichiers, ne sont pas valables avec FOR /F
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 ?
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.
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
Bonsoir,
Méta-MCI (MVP) wrote:
Les ensembles de fichiers, ne sont pas valables avec FOR /F
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 ?
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.
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))))
Les ensembles de fichiers, ne sont pas valables avec FOR /F
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 ?
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.
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
moi
Re,
Je vais tester pour vérifier que j'ai compris ;o))))
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+
Re,
Je vais tester pour vérifier que j'ai compris ;o))))
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 )