[Probleme BATCH] : Commande FOR et plus

: Commande FOR et plus [Probleme BATCH] - Windows & Software

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 :)

Reply

Marsh Posté le 30-01-2003 à 13:23:42   

Reply

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

Reply

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)

Reply

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"-

Reply

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)


Message édité par bigstyle le 30-01-2003 à 14:47:57
Reply

Marsh Posté le 30-01-2003 à 15:54:18    

et en mettant des guillements dans le del, ca marche pas donc ?

Reply

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

Reply

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

Reply

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.

Reply

Marsh Posté le 30-06-2003 à 05:33:28    

J'ai trouvé
 
for /F "tokens=*" %%I in (resultat.txt) do del %%i  
 
Hourra

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed