Пакетная печать строки, пока не будет найдена строка

У меня есть пакетный скрипт, который генерирует файл со следующей структурой (пример)

123|etc|etc
345|etc|etc
678|etc|etc

Я хочу, чтобы мой скрипт распечатывал то, что он находит в каждой строке, пока не найдет |, поэтому в этом примере я бы хотел, чтобы он печатал:

123

345

678 и так далее.

Я пробовал findstr /V с | но он полностью игнорирует строку (как заявляет команда)

Любая идея, как я могу изменить это?


person Fabio Abreu    schedule 20.03.2019    source источник
comment
Пожалуйста, отредактируйте свой вопрос и предоставьте точный код, который вы пробовали! Также взгляните на for /F: for /F "usebackq delims=|" %I in ("D:\path\to\your\file.txt") do echo %I (двойные %-знаки в пакетном файле)   -  person aschipfl    schedule 20.03.2019
comment
FINDSTR не является потоковым редактором, как SED.   -  person Squashman    schedule 20.03.2019
comment
спасибо @aschipfl, это решило мою проблему.   -  person Fabio Abreu    schedule 22.03.2019


Ответы (1)


@echo off
for /f "usebackq tokens=1 delims=|" %%a in ("test.txt") do (
      echo %%a )

      pause

Это перебирает файл (test.txt) в том же каталоге, что и пакетный скрипт. Я говорю ему использовать только 1 токен с разделителем каналов, тогда мы просто распечатываем %%a, который имеет значение вашего первого столбца данных.

person shadow2020    schedule 20.03.2019
comment
возможно, стоит упомянуть: это удаляет пустые строки и строки, начинающиеся с ;. И вы можете удалить tokens=1, так как это все равно по умолчанию - person Stephan; 20.03.2019
comment
TBF @Stephan, пустая строка не имеет ничего предшествующего определенному символу! Для любых строк, начинающихся с точки с запятой, самое простое решение — сопоставить разделитель с символом конца строки: @For /F "UseBackEOL=|Delims=|" %%A In ("my file.ext")Do @Echo(%%A - person Compo; 20.03.2019