2013-01-15 6 views
1

J'ai un fichier texte avec n nombre de lignes. m nombre de lignes contient une chaîne qui m'intéresse (m < = n). J'ai besoin d'un fichier batch qui ne copiera qu'une seule ligne (par exemple la première occurrence) contenant la chaîne dans un nouveau fichier texte. Lorsque j'utilise la commande findstr, il copiera toutes les lignes contenant la chaîne.comment copier une seule instance d'une chaîne d'un fichier texte dans un nouveau fichier texte?

Merci! Paul Safier

Répondre

1

Étant donné votre commande FINDSTR qui localise vos lignes de m (il peut être aussi simple ou aussi compliqué que vous avez besoin)

findstr "search" "fileName.txt" 

alors vous pouvez traiter les résultats de cette commande avec FOR/F boucle. Vous pouvez sortir de la boucle après la première ligne correspondante en utilisant GOTO.

for /f "delims=" %%A in ('findstr "search" "fileName.txt"') do (
    echo %%A >>"outFile.txt" 
    goto :break 
) 
:break 

La commande FOR est l'une des commandes les plus complexes disponibles pour le traitement par lots. Il y a beaucoup d'options. Vous pouvez obtenir de l'aide sur la commande en tapant HELP FOR ou FOR /? à partir d'une invite de commande.

L'option "DELIMS =" désactive l'analyse de la ligne en jetons. Sans cette option, le FOR/F décomposerait chaque ligne en jetons, délimités par des espaces ou des tabulations. La liste des délimiteurs peut être définie sur d'autres caractères ou, dans votre cas, ne pas être définie.

Le code que j'ai donné ci-dessus ignorera les lignes commençant par ; car FOR/F ignorera toutes les lignes commençant par le caractère EOL - ; par défaut. Vous pouvez remplacer le caractère EOL par un seul caractère. Mais si vous ne savez pas à quoi correspond votre ligne correspondante, vous ne savez pas quel caractère utiliser pour EOL. La syntaxe pour désactiver complètement tous parsing jeton et le saut de lignes EOL est impair:

for /f delims^=^ eol^= %%A in (...) do ... 
+0

dbenham: qui semble fonctionner parfaitement! Merci! Paul Safier –

+0

@PaulSafier - Si vous obtenez une réponse qui résout entièrement votre problème, alors vous devriez l'accepter en cliquant sur la coche près du coin supérieur gauche. Cette action permet aux autres de savoir que la question a été répondue, elle vous attribue 2 points de réputation, et attribue à l'affiche de la réponse 15 points. Une seule réponse peut être acceptée pour une question donnée. Vous pouvez également voter sur les réponses une fois que vous avez atteint 15 points. Un vote positif accorde au répondant 10 points. Vous pouvez voter autant de réponses que vous trouvez utiles, même des réponses aux questions des autres peuples. – dbenham

+0

Terminé. Merci. - Paul Safier. –

Questions connexes