在从管道读取的命令中设置变量

时间:2018-01-24 12:30:20

标签: windows batch-file

考虑这个批处理文件:

@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

为什么分配给管道右侧变量的新值不会“粘住”?

1 个答案:

答案 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