Эта командная строка, записанная в командный файл, может использоваться для этой задачи:
@for /F "usebackq delims= eol=" %%I in ("TextFile.txt") do @for /F "tokens=2 eol= delims=: " %%J in ("%%~I") do @if "%%~J" == "Installiert" (call echo(%%Line%%) else set "Line=%%I"
Внешний FOR интерпретирует "
как символ конца строки. Поэтому строки, начинающиеся с "
, будут игнорироваться внешним FOR .
Внутренний FOR интерпретирует символ пробела как символ конца строки, который здесь не имеет значения, поскольку символ пробела также является разделителем. Разделение строк выполняется сначала с помощью FOR , что приводит к удалению всех пробелов и двоеточий из начала строки и, таким образом, пробела как символа конца строки здесь не проблема.
Благодарим aschipfl за дополнительную информацию о том, как два FOR выше с указанными параметрами обрабатывают строки в указанном текстовом файле.
Лучше было бы:
@for /F usebackq^ delims^=^ eol^= %%I in ("TextFile.txt") do @for /F "tokens=2 delims=: eol=" %%J in ("%%~I") do @if "%%~J" == " Installiert" (call echo(%%Line%%) else set "Line=%%I"
Внешний FOR запускается с пустым списком разделителей строк и без символа конца строки. Внутренний FOR запускается также без символа конца строки, но только с двоеточием в качестве разделителя строк, что является причиной для сравнения пробела в начале строки.
Обе командные строки выводятся при исполнении с файлом TextFile.txt
в текущем каталоге, содержащем размещенные строки:
Funktionsidentität : Hello.Face.17658~~~~0.0.1.0
Funktionsidentität : Hello.Face.Migration.17658~~~~0.0.1.0
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
call /?
echo /?
for /?
if /?
set /?