/ / Supprimer des lignes dans un fichier txt via un fichier batch jusqu'à ce qu'une séquence soit trouvée - fichier batch

Supprimer des lignes dans un fichier txt via un fichier de commandes jusqu'à ce qu'une séquence soit trouvée - fichier de commandes

J'ai un fichier txt généré. Ce fichier contient certaines lignes qui sont superflues et doivent être supprimées. Je dois supprimer toutes les lignes jusqu'à ce que je trouve la séquence "AA BB CC DD" que je recherche et arrêter de supprimer et enregistrer en tant que nouveau fichier.

Donc, si le fichier txt ressemble à ceci:

Good Line of data
bad line of C:DirectoryERRORmyFile.dll
Another good line of data
bad line: REFERENCE
AA BB CC DD THis is the start of valid data
Line 2
Line 3
End

J'aimerais que le nouveau fichier se termine comme ceci:

AA BB CC DD THis is the start of valid data
Line 2
Line 3
End

TIA.

Réponses:

0 pour la réponse № 1
@ECHO OFF
SETLOCAL
SET "output="
SET "string=AA BB CC DD"
(
FOR /f "USEBACKQdelims=" %%a IN ("c:batch scriptsq22188484.txt") DO (
IF NOT DEFINED output (ECHO %%a|FIND "%string%" >NUL&IF NOT ERRORLEVEL 1 SET output=Y)
IF DEFINED output ECHO(%%a
)
)>"newfile.txt"

GOTO :EOF

J'ai utilisé un fichier nommé q22188484.txt pour mes tests; sortie en newfile.txt


Correction: pour autoriser les espaces dans le nom de famille, il faut des guillemets mais aussi USEBACKQ option. newfile modifié de façon similaire pour convenir.


0 pour la réponse № 2

Cela montrera les lignes de where it matches the string et jusqu'à 99999 lines after it, qui dans la plupart des cas durera jusqu'à la fin. Ajoutez encore 9 à ce nombre pour près d'un million de lignes.

Le terme de recherche est une expression régulière, donc si vous utilisez certains caractères, il peut être nécessaire de les échapper avec

Ceci utilise un fichier de commandes auxiliaire appelé findrepl.bat - télécharger à partir de: https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

Endroit findrepl.bat dans le même dossier que le fichier de commandes ou sur le chemin.

type "file.txt"|findrepl "AA BB CC DD"  /o:0:99999

0 pour la réponse № 3
@echo off
setlocal

set "filename=C:Batch ScriptsFile Name.txt"
for /F "usebackq delims=:" %%a in ("findstr /N /C:"AA BB CC DD" "%filename%"") do set "line=%%a" & goto continue
:continue
(for /F "usebackq skip=%line% delims=" %%a in ("findstr "^" "%filename%"") do echo %%a) > newFile.txt