Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在从管道读取的命令中设置变量_Windows_Batch File - Fatal编程技术网

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”