Discussion:
Extraction de chaine en DOS
(trop ancien pour répondre)
Pierre.Roche
2005-01-04 22:36:04 UTC
Permalink
Bonsoir à tous
Il y a une manip que je n'arrive pas à faire sous DOS dans un fichier batch.
J'ai une variable "animal" initialisée avec "le petit chat" par exemple.
Je voudrais extraire 5 caractères à partir de la position 4 afin d'obtenir
le mot "petit".
J'ai essayé un certain nombre de choses mais en vain.

Si vous aviez la solution, ce serait super génial.

Merci
Jean-Claude BELLAMY
2005-01-04 23:54:02 UTC
Permalink
Post by Pierre.Roche
Bonsoir à tous
Il y a une manip que je n'arrive pas à faire sous DOS dans un fichier
batch. J'ai une variable "animal" initialisée avec "le petit chat"
par exemple. Je voudrais extraire 5 caractères à partir de la position 4
afin
d'obtenir le mot "petit".
J'ai essayé un certain nombre de choses mais en vain.
Si vous aviez la solution, ce serait super génial.
Tout dépend si tu parles réellement de DOS, ou simplement d'une fenêtre de
commandes...
Car sous NT (et consorts) c'est nasodigital :

set animal=le petit chat
set adjectif=%animal:~3,5%



3 = nbre de caractères à ignorer au début
5 = nbre de caractères à copier
Très important : le délimiteur ":~"
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.net
Jean-***@wanadoo.fr * ***@free.fr
Pierre.Roche
2005-01-05 21:29:26 UTC
Permalink
C'est géant, c'est exactement ce que je cherche depuis quelques temps !!!!
Merci beaucoup

Je ne connaissais pas du tout cette fonctionnalité écrite ainsi.

En existe-t-il d'autres (par hasard) ?

Merci encore
Post by Jean-Claude BELLAMY
Post by Pierre.Roche
Bonsoir à tous
Il y a une manip que je n'arrive pas à faire sous DOS dans un fichier
batch. J'ai une variable "animal" initialisée avec "le petit chat"
par exemple. Je voudrais extraire 5 caractères à partir de la position 4
afin
d'obtenir le mot "petit".
J'ai essayé un certain nombre de choses mais en vain.
Si vous aviez la solution, ce serait super génial.
Tout dépend si tu parles réellement de DOS, ou simplement d'une fenêtre de
commandes...
set animal=le petit chat
set adjectif=%animal:~3,5%
3 = nbre de caractères à ignorer au début
5 = nbre de caractères à copier
Très important : le délimiteur ":~"
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.net
Jean-Claude BELLAMY
2005-01-05 22:36:53 UTC
Permalink
Post by Pierre.Roche
C'est géant, c'est exactement ce que je cherche depuis quelques temps
!!!! Merci beaucoup
Je ne connaissais pas du tout cette fonctionnalité écrite ainsi.
En existe-t-il d'autres (par hasard) ?
Oui !

Il suffit d'afficher l'aide en ligne de SET et de FOR pour les avoir ...

P.ex. on peut effectuer des subtitutions de chaines :

p.ex.
@echo off
set oldtxt=May the Force be with You
set newtxt=%oldtxt:th=l%

Remplace tous les "th" par des "l"

echo %newtxt% va donner :

May le Force be wil You

-----------------------------

Il existe aussi des fonctions d'extractions de nom et/ou extension et/ou
chemin dasn de varaibels contenant un nom de chmein complet.

Cela s'applique :
- aux variables de boucle FOR
- aux paramètres %1, %2 ..., passés en paramètres

%~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

Dans les exemples ci-dessus %I et PATH peuvent être remplacés par d'autres
valeurs valides. La syntaxe %~ se termine par un nom de variable FOR valide.
Le choix de noms de variables en majuscules comme %I facilite la lecture
et empêche toute confusion avec les modificateurs qui ne tiennent pas compte
de la casse.

Exemple :
"testfic.bat"
--------- couper ici ---------
@echo off
echo Le fichier a analyser est %~1
echo Il est sur le dique %~d1
echo Dans le dossier %~p1
echo Son extension est %~x1
echo Sa taille est de %~z1 octets
--------- couper ici ---------


I:\>testfic "I:\Program
Files\Borland\Delphi7\Projects\SuperExec\SuperExec.exe"
Le fichier a analyser est I:\Program
Files\Borland\Delphi7\Projects\SuperExec\SuperExec.exe
Il est sur le disque I:
Dans le dossier \Program Files\Borland\Delphi7\Projects\SuperExec\
Son extension est .exe
Sa taille est de 1129472 octets


Ces fonctions peuvent être utiles, p.ex., pour récupérer la lettre du disque
dans lequel se trouve le script
En effet, le paramètre %0 contient toujours le nom du script.

set dd=%~d0
echo Ce script est sur le disque %dd%


Pour passer les longues soirées d'hiver :
SET /?
FOR /?
;-)
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.net
Jean-***@wanadoo.fr * ***@free.fr
Pierre.Roche
2005-01-06 20:00:28 UTC
Permalink
MERCI pour toutes ces explications commentées.

Je vais m'y attarder longuement...
Post by Jean-Claude BELLAMY
Post by Pierre.Roche
C'est géant, c'est exactement ce que je cherche depuis quelques temps
!!!! Merci beaucoup
Je ne connaissais pas du tout cette fonctionnalité écrite ainsi.
En existe-t-il d'autres (par hasard) ?
Oui !
Il suffit d'afficher l'aide en ligne de SET et de FOR pour les avoir ...
p.ex.
@echo off
set oldtxt=May the Force be with You
set newtxt=%oldtxt:th=l%
Remplace tous les "th" par des "l"
May le Force be wil You
-----------------------------
Il existe aussi des fonctions d'extractions de nom et/ou extension et/ou
chemin dasn de varaibels contenant un nom de chmein complet.
- aux variables de boucle FOR
- aux paramètres %1, %2 ..., passés en paramètres
%~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
%~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
Dans les exemples ci-dessus %I et PATH peuvent être remplacés par d'autres
valeurs valides. La syntaxe %~ se termine par un nom de variable FOR valide.
Le choix de noms de variables en majuscules comme %I facilite la lecture
et empêche toute confusion avec les modificateurs qui ne tiennent pas compte
de la casse.
"testfic.bat"
--------- couper ici ---------
@echo off
echo Le fichier a analyser est %~1
echo Il est sur le dique %~d1
echo Dans le dossier %~p1
echo Son extension est %~x1
echo Sa taille est de %~z1 octets
--------- couper ici ---------
I:\>testfic "I:\Program
Files\Borland\Delphi7\Projects\SuperExec\SuperExec.exe"
Le fichier a analyser est I:\Program
Files\Borland\Delphi7\Projects\SuperExec\SuperExec.exe
Dans le dossier \Program Files\Borland\Delphi7\Projects\SuperExec\
Son extension est .exe
Sa taille est de 1129472 octets
Ces fonctions peuvent être utiles, p.ex., pour récupérer la lettre du
disque dans lequel se trouve le script
En effet, le paramètre %0 contient toujours le nom du script.
set dd=%~d0
echo Ce script est sur le disque %dd%
SET /?
FOR /?
;-)
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.net
Hugues VILLEGER
2005-01-14 13:25:32 UTC
Permalink
Bonjour,

J'utilise cette commande sous Windows 2000
set PathCarl="D:\Carlmast\program\"
set PathCarl2=%PathCarl:~1,-1%
echo %PathCarl2% --> D:\Carlmast\program\


Ca marche bien mais sous NT ??
echo %PathCarl2% -->"D:\Carlmast\program\"
Ou est l'erreur ??
merci d'avance
Post by Jean-Claude BELLAMY
Post by Pierre.Roche
Bonsoir à tous
Il y a une manip que je n'arrive pas à faire sous DOS dans un fichier
batch. J'ai une variable "animal" initialisée avec "le petit chat"
par exemple. Je voudrais extraire 5 caractères à partir de la position 4
afin
d'obtenir le mot "petit".
J'ai essayé un certain nombre de choses mais en vain.
Si vous aviez la solution, ce serait super génial.
Tout dépend si tu parles réellement de DOS, ou simplement d'une fenêtre de
commandes...
set animal=le petit chat
set adjectif=%animal:~3,5%
3 = nbre de caractères à ignorer au début
5 = nbre de caractères à copier
Très important : le délimiteur ":~"
Jean-Claude BELLAMY
2005-01-14 16:19:29 UTC
Permalink
Post by Hugues VILLEGER
Bonjour,
J'utilise cette commande sous Windows 2000
set PathCarl="D:\Carlmast\program\"
set PathCarl2=%PathCarl:~1,-1%
echo %PathCarl2% --> D:\Carlmast\program\
Ca marche bien mais sous NT ??
echo %PathCarl2% -->"D:\Carlmast\program\"
Ou est l'erreur ??
Les fonctionnalités de SET sous NT4 sont plus restreintes que celles de SET
sous W2K/XP/W2K3

Le commutateur "/P" n'existe pas sous NT4
SET /P variable=[ChaîneInvite]


Dans une expression %PATH:~x,y%, il n'y a pas de traitement
des valeurs négatives comme sous W2K/XP/W2K3

"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.
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.net
Jean-***@wanadoo.fr * ***@free.fr
Hugues VILLEGER
2005-01-14 16:31:41 UTC
Permalink
merci,
j'ai remplacé par set PathCarl2=%PathCarl:"=% pour supprimer les "
comme tu l'indiquais dans le fil et j'obtiens ce que je veux.
Post by Jean-Claude BELLAMY
Post by Hugues VILLEGER
Bonjour,
J'utilise cette commande sous Windows 2000
set PathCarl="D:\Carlmast\program\"
set PathCarl2=%PathCarl:~1,-1%
echo %PathCarl2% --> D:\Carlmast\program\
Ca marche bien mais sous NT ??
echo %PathCarl2% -->"D:\Carlmast\program\"
Ou est l'erreur ??
Les fonctionnalités de SET sous NT4 sont plus restreintes que celles de SET
sous W2K/XP/W2K3
Le commutateur "/P" n'existe pas sous NT4
SET /P variable=[ChaîneInvite]
Dans une expression %PATH:~x,y%, il n'y a pas de traitement
des valeurs négatives comme sous W2K/XP/W2K3
"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.
--
smitted.>
Loading...