我尝试将命令输出传递给变量,然后比较这些变量是否具有相同的值。但是它总是返回两个变量具有相同的值(即使它不是)。以下是我的代码:
@echo off
goto main
:main
setlocal
echo 111 | (set /p readvalue= & set readvalue)
echo 123 | (set /p readvaluebash= & set readvaluebash)
if "%readvalue%"=="%readvaluebash%" goto valid
if NOT "%readvalue%"=="%readvaluebash%" goto invalid
:valid
echo yes
pause
goto finish
:invalid
echo no
pause
goto finish
:finish
endlocal
我总是得到yes
结果。有谁知道我的错误吗?提前谢谢!
答案 0 :(得分:3)
当你跑步时(对于另一行同样)
echo 111 | (set /p readvalue= & set readvalue)
您看到控制台中显示的值为变量值111
,因此set /p
能够检索管道数据。
问题是管道操作符启动了两个单独的cmd
实例:一个运行管道的左侧部分(echo
),另一个运行右侧部分(set /p
)。
由于每个进程都有自己的环境空间,并且set /p
在单独的cmd
实例中执行,因此对这个新cmd
实例中任何变量的任何更改都不会改变环境运行批处理文件的cmd
实例。
要将命令的输出存储在变量中,而不是管道,您可以使用for /f
命令
for /f "delims=" %%a in ('echo 111') do set "readValue=%%a"