windows - 为什么 set /p 只从管道中获取 1 行?
问题描述
我试图做类似的事情
type test.txt | multiline.bat
和
测试.txt
1
2
3
多行.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
推荐阅读
- php - 检测 Laravel 中不必要的文件和文件夹并删除它们
- c# - 限制可用整数的数量
- c++ - 为什么|| 操作员在我的情况下工作
- python - 在 IIS 10 上部署 Python Flask - 发布路由失败
- java - 如何使用 Jackson (Java) 正确打开 SSL 流到多个 URL?
- r - 如何将“base R”位置图迁移到“ggplot2”并避免“for”循环?
- excel - Excel 生成两张工作表之间的价格差异
- javascript - 错误:使用 google meet 链接创建活动时会议类型值无效
- flutter - Flutter中的网络请求面临问题
- mongodb - 我想通过 id 查找数据并传递正确的 id 但返回为 null