Почему set / p получает только 1 строку из канала? - PullRequest
1 голос
/ 25 марта 2020

Я пытался сделать что-то вроде

type test.txt | multiline.bat

с

test.txt

1
2
3

multiline.bat

set /p a=a
set /p "b=b"
set /p c=c

(echo %a% %b% %c%)>result.txt
pause

Но result.txt остался с

1

, когда я ожидал

1 2 3

Я нашел { ссылка }, который сказал

set /p doesn't work with pipes, it takes one (randomly) line from the input.

Но почему ??

1 Ответ

0 голосов
/ 25 марта 2020

set /p прекращает чтение ввода при обработке новой строки. Это можно увидеть с помощью простого сценария

@echo off
set /p "line=String containing newline:"
echo %line%

и затем вставив строку

one
two

Будет отображаться только one.


Если вы знаете, сколько строк вам нужно обработать, вы можете сгруппировать свои команды set /p в блок кода и перенаправить файл в него следующим образом:
(
    set /p "a="
    set /p "b="
    set /p "c="
)<test.txt
(echo %a% %b% %c%)>result.txt

Вы также можете взять введите имя входного файла в качестве параметра и измените test.txt на %1 в этом фрагменте.

...