考虑这个批处理文件:
@echo off
echo Separate lines:
set line=previous value
echo new value|set /p line=
set line
echo Same line:
set line=previous value
echo new value|(set /p line=&set line)
输出:
Separate lines:
line=previous value
Same line:
line=new value
为什么分配给管道右侧变量的新值不会“粘住”?
答案 0 :(得分:1)
您无法使用管道解决此问题,因为管道的两端都在新的cmd.exe实例中执行。
因此,您的样本echo new value|(set /p line=&set line)
显示文本存储在行变量中,可以从该实例输出。
但是在管道完成后,两个cmd实例都会被销毁,你的行变量也会丢失。
如果要从批处理文件外部的管道输入中获取,可以使用FOR循环。
@echo off
setlocal EnableDelayedExpansion
set line=original
FOR /F "delims=" %%L in ('more') do set "line=%%L"
echo !line!
使用
进行测试echo New Text | myBatch.bat