gpt4 book ai didi

batch-file - 批处理 : Pipe command output to variable and compare

转载 作者:行者123 更新时间:2023-12-04 00:33:59 26 4
gpt4 key购买 nike

我尝试将我的命令输出通过管道传输到变量,然后比较这些变量是否具有相同的值。但是它总是返回两个变量具有相同的值(即使不是)。下面是我的代码:

@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结果。有人知道我的错误吗?提前致谢!

最佳答案

当你运行时(另一条线相同)

echo 111 | (set /p readvalue= & set readvalue)

您会看到控制台中显示的变量值为 111 ,所以 set /p能够检索管道数据。

问题是管道操作符启动了两个单独的 cmd实例:一个运行管道的左侧部分 ( echo ),另一个运行右侧部分 ( set /p )。

由于每个进程都有自己的环境空间,并且如 set /p在单独的 cmd 中执行例如,对这个新 cmd 中任何变量的任何更改instace 不会改变 cmd 的环境运行批处理文件的实例。

要将命令的输出存储在变量中,而不是管道,您可以使用 for /f命令

for /f "delims=" %%a in ('echo 111') do set "readValue=%%a"

关于batch-file - 批处理 : Pipe command output to variable and compare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46323963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com