如果你知道需要处理多少行,你可以将
我试图做一些类似的事情
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
。