Windows 在从管道读取的命令中设置变量
考虑此批处理文件:Windows 在从管道读取的命令中设置变量,windows,batch-file,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 va
@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
为什么分配给管道右侧变量的新值不会“粘住”?管道无法解决此问题,因为管道的两侧都在新的cmd.exe实例中执行 因此,示例
echo new value |(set/p line=&set line)
显示文本存储在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
虽然我确信您的示例只是为了您的问题而创建的,但为什么要使用
echo new value | set/p line=
而不是set“line=new value”
?