: Commande FOR et plus [Probleme BATCH] - Windows & Software
Marsh Posté le 30-01-2003 à 13:45:50
Au passage,sous 2k il existe de nouvelles options pour la commande FOR et j ai tappe :
for /F %~fI in (find.txt) do @del %~fI
Mais ca me dit
L'utilisation de l'opérateur chemin dans la substitution
de paramètre de commande n'est pas valide : %~fI in (find.txt) do @del %~fI
Marsh Posté le 30-01-2003 à 13:57:02
Je comprend pas bien...
ca marche pas si tu fais tout simplement
del "%I%"
(rajouter les guillements autour de la variable setée par le for quoi)
(d'ailleur il manque pas un seconc % dans ta ligne ?
ca fait bizarre un seul.. mais bon encore une fois j'ai
jamais ecris de script sous dos)
Marsh Posté le 30-01-2003 à 14:08:33
Essaie ça
for /F "DELIMS=-" %%i in (resultat.txt) do del %%i
(pour un batch)
Mais il faut absolument que le fichier résulats.txt soit présenté sous forme :
-"c:\WINDOWS\system32\abc.exe"-
-"c:\Documents and Settings\fd\Mes documents\def.exe"-
Marsh Posté le 30-01-2003 à 14:44:16
Justement mon gros probleme c est qu il n y a pas de guillemets dans mon fichier resultat.txt sur lekel FOR travaille.
EDIT : Sous 2k voila ce qui est tire de l help du FOR :
%~fI - étend %I en nom de chemin d'accès reconnu
Mais ca ne passe pas chez moi cette commande (cf plus haut)
Marsh Posté le 30-01-2003 à 15:54:18
et en mettant des guillements dans le del, ca marche pas donc ?
Marsh Posté le 30-01-2003 à 16:05:54
J'ai trouvé, tout simplement
for /F "DELIMS=-" %%i in (resultat.txt) do del "%%i"
Je comprend pas pourquoi le DELIMS mais ça marche avec ton resultat.txt
Marsh Posté le 30-01-2003 à 16:07:02
Tu ne sais me mettre l'aide du for/? en français ici
Ca m'arrangerait bien
Marsh Posté le 30-01-2003 à 16:24:32
C est super etrange le coup de DELIMS,j avoue que je capte pas non plus mais en tout cas,ca marche merci beaucoup.
Je te c/c ici l'aide de mon for,si tu trouves pkoi ca ne passait pas chez moi n hesites pas
En tout cas merci bcp.
Ex?cute une commande donn?e pour chaque fichier d'un ensemble de fichiers.
FOR %variable IN (ensemble) DO commande [param?tres]
%variable Sp?cifie un param?tre rempla?able par une seule lettre.
(ensemble) Ensemble de fichiers. Caract?res g?n?riques autoris?s.
commande Commande ? ex?cuter pour chaque fichier.
param?tres Liste des param?tres ou des options pour la commande
sp?cifi?e.
Pour utiliser la commande FOR dans un programme de commandes, sp?cifiez
%%variable au lieu de %variable. Les noms de variables respectent la
casse, donc %i est diff?rent de %I.
Si les extensions de commandes sont activ?es, les formes suppl?mentaires
suivantes sont prises en charge pour la commande FORÿ:
FOR /D %variable IN (ensemble) DO commande [param?tres]
Si ensemble contient des caract?res g?n?riques, alors la correspondance se
fait sur les noms de r?pertoires au lieu des noms de fichiers.
FOR /R [[lecteur:]chemin] %variable IN (ensemble) DO commande [param?tres]
Parcourt l'arborescence de r?pertoires depuis la racine [lecteur:]chemin,
en ex?cutant FOR dans chaque r?pertoire de l'arborescence. Si aucun
r?pertoire n'est sp?cifi? apr?s /R alors le r?pertoire en cours est
utilis?. Si ensemble est seulement un point (.) alors seule l'arborescence
de r?pertoires sera ?num?r?e.
FOR /L %variable IN (d?but,pas,fin) DO commande [param?tres]
L'ensemble est une s?quence de chiffres allant de d?but ? fin, incr?ment?
de pas. Ainsi (1,1,5) g?n?re la s?quence 1 2 3 4 5 et (5,-1,1) g?n?re la
s?quence (5 4 3 2 1)
FOR /F ["options"] %variable IN (ensemble-fichiers) DO commande [param?tres]
FOR /F ["options"] %variable IN ("cha?ne" ) DO commande [param?tres]
FOR /F ["options"] %variable IN ('commande' DO commande [param?tres]
ou, si l'options usebackq est utilis?eÿ:
FOR /F ["options"] %variable IN (ensemble-fichiers) DO commande [param?tres]
FOR /F ["options"] %variable IN ('cha?ne' DO commande [param?tres]
FOR /F ["options"] %variable IN (`commande`) DO commande [param?tres]
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. Le traitement consiste ? lire dans le fichier, le
d?couper en lignes individuelles de texte puis analyser chaque ligne en
z?ro ou plusieurs parties. Le corps de la boucle FOR est ensuite appel?
avec la ou les valeurs de variables prenant la valeur de la ou des parties
trouv?es. Par d?faut, /F transmet la premi?re partie s?par?e par un blanc
dans chaque ligne de chaque fichier. Les lignes vides sont ignor?es. Vous
pouvez outrepasser le comportement d'analyse par d?faut en sp?cifiant le
param?tre optionnel "options". Ceci est une cha?ne entre guillemets
contenant un ou plusieurs mots-cl?s sp?cifiant diverses options d'analyse.
Les mots-cl?s sontÿ:
eol=c - sp?cifie un caract?re de commentaire de fin de ligne
(un seul)
skip=n - sp?cifie le nombre de lignes ? ignorer en d?but
de fichier.
delims=xxx - sp?cifie un ensemble de d?limiteurs. Ceci remplace
l'ensemble de d?limiteurs par d?faut qui sont
l'espace et la tabulation.
tokens=x,y,m-n - sp?cifie les parties de chaque ligne devant ?tre
transmises au corps de FOR ? chaque it?ration.
Ceci provoquera l'allocation de noms de variables
suppl?mentaires. La forme m-n est une ?tendue
sp?cifiant les parties allant de m ? n. Si le
dernier caract?re de la cha?ne tokens= est une
ast?risque, alors une variable suppl?mentaire est
allou?e et re?oit le texte restant dans la ligne
suivant la derni?re partie analys?e.
usebackq - sp?cifie que la nouvelle s?mantique est en place,
lorsqu'une cha?ne entre guillemets invers?s est
ex?cut?e en tant que commande et une cha?ne entre
guillemets simples est une cha?ne de commande
litt?rale et permet l'utilisation de guillemets
doubles pour citer des noms de fichiers.
Quelques exemples explicatifsÿ:
FOR /F "eol=; tokens=2,3* delims=, " %i in (monfich.txt) do @echo %i %j %k
analyse chaque ligne de monfich.txt, en ignorant les lignes commen?ant
par un point-virgule, en transmettant les 2nde et 3?me parties de
chaque ligne au corps de FOR, les parties ?tant d?limit?es par des
virgules et/ou espaces. Notez que le corps de FOR r?f?rence %i pour
l'obtention de la 2nde partie, %j pour l'obtention de la 3?me partie
et %k pour l'obtention des parties restantes apr?s la 3?me. Pour les
noms de fichiers contenant des espaces, placez les noms de fichiers
entre guillemets doubles. Afin d'utiliser ainsi les guillemets doubles,
vous devez ?galement utiliser l'option usebackq, faute de quoi les
guillemets doubles seraient interpr?t?s comme d?finissant une cha?ne
litt?rale ? analyser.
%i est d?clar?e explicitement dans la d?claration FOR et %j et %k
sont d?clar?es implicitement via l'option tokens=. Vous pouvez sp?cifier
jusqu'? 26 paries via la ligne tokens=, tant que cela ne provoque pas
de tentative de d?claration de variable plus ?lev?e que la lettre 'z'
ou 'Z'. Souvenez-vous que les variables de FOR se composent de lettres,
tiennent compte de la casse, sont globales et que plus de 52 ne peuvent
pas ?tre actives ? la fois.
Vous pouvez aussi utiliser la logique d'analyse FOR /F sur une cha?ne en
pla?ant ensemble-fichiers entre guillemets entre les parenth?ses,
en utilisant des guillemets simples. Elle sera trait?e comme une ligne
d'entr?e simple provenant d'un fichier puis analys?e.
Enfin, vous pouvez utiliser la commande FOR /F pour analyser les
donn?es en sortie d'une commande. Faites ceci en pla?ant des guillemets
invers?s autour de ensemble-fichiers entre les parenth?ses. Elle sera
trait?e comme une ligne de commande transmise ? un CMD.EXE enfant et
la sortie est gard?e en m?moire et analys?e comme s'il s'agissait d'un
fichier. Ainsi l'exemple suivantÿ:
FOR /F "usebackq delims==" %i IN (`ensemble`) DO @echo %i
?num?rerait les noms de variables d'environnement de l'environnement
en cours.
De plus, la substitution de r?f?rences de variables FOR a ?t? am?lior?e.
Vous pouvez maintenant utiliser la syntaxe optionnelle suivanteÿ:
%~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.
Marsh Posté le 30-06-2003 à 05:33:28
J'ai trouvé
for /F "tokens=*" %%I in (resultat.txt) do del %%i
Hourra
Marsh Posté le 30-01-2003 à 13:23:42
Voila mon probleme en resumé.
J'ai un fichier texte (cree au prealable avec un egrep sous win),pour qui chaque ligne est de la forme :
c:\WINDOWS\system32\abc.exe
c:\Documents and Settings\fd\Mes documents\def.exe
...
J'aurai souhaité supprimé tout ces fichiers la.
J'ai donc utilisé la commande FOR de cette maniere :
for /F %i in (resultat.txt) do @del %i
(d ailleurs au passage,comment faire passer plusieurs commandes dans le DO ?)
Lorsque je lance cette commande,ca va bien me supprimer c:\WINDOWS\system32\abc.exe mais par contre c:\Documents and Settings\fd\Mes documents\def.exe ne le sera pas car il y a des espaces.
j'ai une erreur style "Impossible de trouver c:\Documents"
Il faudrait donc que je rajoute automatiquement des guillemets a chaque debut et fin de mes lignes de mon resultat.txt ou bien que je trouve une autre solution mais la j avoue que je vois pas trop.
Voila,je suis ouvert a toutes propositions