Suche eine string in einer text-Datei im batch-Skript
Wie kann ich die Suche einer Zeichenkette in eine text-Datei Zeile für Zeile, und wenn eine übereinstimmung gefunden, kopieren Sie die ganze Zeile, wo die übereinstimmung gefunden wurde, in eine variable?
Grundsätzlich habe ich eine text-Datei, die enthält die Adresse/Pfad alle Unterordner in einem Ordner. Ich möchte nach einem string gesucht werden in dieser text-Datei (die Zeichenfolge entsprechen, wird nur ein Teil der Zeile) und wenn es eine übereinstimmung gibt, die ich kopieren will in eine variable, die ganze Linie.
Der string kommt aus einer Datei Namen und einmal gibt es ein Spiel in der text Datei, die ich verwenden möchten, die sub-Ordner-Adresse um die Datei zu verschieben es.
Dies ist, was ich gemacht habe bis jetzt:
@ECHO off
::Reads all the folders and subfolders existing in the "root1" folder and writes the path for each foleder/subfolder into the "1.txt" file
dir /b /s /a:d "...\root1" > "...\1.txt"
::Reads all the files existing in "root2" folder and writes the path of each file into the "2.txt" file
dir /s /b "...\root2\" > "...\2.txt"
SETLOCAL EnableDelayedExpansion
::reads the last file path from the "2.txt" and asign it to a variable
for /f "delims=" %%x in (...\2.txt) do set Build=%%x
set "source=%Build%"
echo %source%
::from (...\...\...\...\a_b.txt) reads the name of the file (a_b.txt) without extension (a_b) and swap the letter and outputs (b\a) into text file "7.txt"
FOR /F "tokens=6 delims=\" %%G IN (...\2.txt) DO echo %%G > ...\3.txt
FOR /F "tokens=1 delims=." %%G IN (...\3.txt) DO echo %%G > ...\4.txt
FOR /F "tokens=1 delims=_" %%G IN (...\4.txt) DO echo %%G > ...\5.txt
FOR /F "tokens=2 delims=_" %%G IN (...\4.txt) DO echo %%G > ...\6.txt
FOR /F %%G IN (...\5.txt) DO set "two=%%G"
FOR /F %%H IN (...\6.txt) DO set "one=%%H"
echo %one%\%two% > ...\7.txt
::assign the content (one line) from "7.txt" file to a variable
FOR /F %%G IN (...\7.txt) DO set "third=%%G"
echo %third%
::should search the string from "third" variable in the "1.txt" and when found a match copy the respective line into a variable and put it into "8.txt"
FOR /F %%a IN ('FINDSTR /x "%third%" ...\1.txt') DO set "xz=%%b"
echo %xz% > ...\8.txt
endlocal
- Können Sie einige Beispiel-Dateien und beschreiben Schritt für Schritt, was Sie sehen wollen, passieren mit diesen Beispiel-Dateien?
for /F "delims=" %%M in ('find /I "search string" ^< "textfile.txt"') do echo %%I
- jede Zeile, die ein match geliefert%%I
imfor
Schleife, anstelle vonfind
Sie können auchfindstr
...- Das ist nicht zu helfen. Bearbeiten Sie Ihre Frage für fügen Sie hilfreiche details und formatieren Sie Sie als code für die Lesbarkeit.
- FOR /F %%a IN ('FIND /I "%Dritten%" ^< ...\7.txt') DO set "xz=%%a" echo %xz% > ...\8.txt Ausgänge die variable "Dritten". Es ist nicht das, was ich erreichen will. Ich will die ganze Linie.
- Ihre batch-scheint zu Komplex. Aber ohne weitere Beispiele aus der Praxis ist es schwierig, grep, was Sie suchen.
- Ich sagte nicht funktioniert, aschipfl. Ich war falsch und ich sehr viel danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erreichen Sie dies mit einer Reihe von Befehlen.
Sie können mit dem Befehl "suchen" um eine Datei zu suchen und zurück den passenden Linien.
Hier, ich habe da eine Vorlage Befehl um eine Datei zu suchen, und leiten seine Ausgabe in eine Datei.
Hier ist ein früherer Artikel, der zeigt, wie eine Datei Lesen und Zeile für Zeile in DOS.
batch-Skript - Lesen Zeile für Zeile
Halte ich für "etwas tun" würden Sie "verschieben" die Datei in das Verzeichnis und brechen aus der Schleife, evtl. mit einem "goto label".