Чтение строк с пробелами из файла с помощью пакета

Я пытаюсь прочитать каждую строку из текстового файла, используя пакет.

Строки внутри файла имеют пробелы, так что это пример ввода:

This is the first line
This is the second line
...

Я использую следующий исходный код

FOR /f %%a in ("%1") do (
    @echo %%a
)
goto:eof

Результат следующий:

This
This
...

Я прочитал следующую запись в переполнении стека, но это не решает мою проблему. Пакетное: чтение строк из файла с пробелами в пути

3 ответа

Решение

Попробуй это.

FOR /f "tokens=* delims=,"  %%a in ('type "%1"') do (
    @echo %%a
)

Бали С и Генри Гао юбка вокруг вопроса.

Ваш код завершает значение в первом месте, потому что FOR /F предназначен для анализа строки в токены с разделителями. Разделителями по умолчанию являются пробел и табуляция. Вы можете сохранить всю строку, установив DELIMS в ноль.

for /f "usebackq delims=" %%a in ("%~1") do echo %%a

Но есть и потенциальные проблемы: цикл FOR /F пропускает пустые строки, а также пропускает строки, начинающиеся с символа EOL (; по умолчанию).

Команда FOR (особенно вариант FOR /F) - сложный зверь. Я рекомендую прочитать http://judago.webs.com/batchforloops.htm чтобы получить хорошее представление о закоулках команды FOR.

Вам нужно установить разделитель для того, где партия читает до каждой строки

FOR /f "delims=;" %%a in ("%1") do (
    @echo %%a
)

Разделителем по умолчанию для конца строки является точка с запятой. В качестве альтернативы используйте символ, который вы вряд ли увидите в файле, например ~ или же ¬ или что-то.

Другие вопросы по тегам