为什么set/p只从管道中获取1行



我试图做一些类似的事情

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

我发现https://stackoverflow.com/a/6980605,上面写着

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

但为什么??

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

相关内容

  • 没有找到相关文章

最新更新