怎么用bat得到一个命令执行后的返回值赋值给一个变量

比如执行wmic ENVIRONMENT WHERE "Name='path'and UserName='<System>'" GET VariableValue会返回环境变量path的值,如何把返回值赋值给一个变量.直接set a=是不行的。

1、在电脑的桌面,右键新建一个.txt文件,将其文本打开。

2、在文本中输入我们需要执行的命令。

3、在文本中输入我们需要执行的命令。

4、最后输入暂停按钮=====  pause; 然后将其文本保存,关闭。

5、选择中文本,右键重命名为  .bat文件

6、重命名完成之后,会弹出一个更改文件后缀名的窗口,点击【确定】按钮。

7、双击运行刚刚编写.bat文件,查看输出内容,滑动滚动条上下移动。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-09

返回值赋值确实麻烦,因为有很多特殊字符。

不过,你这个例子,倒是有解。

 

请试试命令

echo %path%

 或者

set "a=%path%" 
echo %a%
pause

追问

我得吧这个path 变量的值赋值给 一个变量,我要用这个变量,进行其他判断什么的。
或者完整点给你说吧,我是想判断系统环境变量里面一个名字叫做“xxx”的是否存在,如果存在,我要看他的值跟一个字符串是否相等,相等就不改变他的值,不想等我就改变,如果不存在,我就新增这个名为xxx的系统变量。是这样的,但不一定是path这个特殊的,可能是其他用户添加的系统变量,比如JAVA_HOME 或者其他的。

追答

用BAT的SET命令截取和判断字符是非常蛋疼的,劝你还是想想别的招吧。

追问

其实不复杂,就是怎么得到xxx的值并赋值给a,之后我自有办法判断。这也是为什么我提问题直击重点。

追答@echo off
for /f "delims=" %%a in ('wmic ENVIRONMENT WHERE "Name='path'and UserName='<System>'" GET VariableValue^|findstr "system32"') do (
set "a=%%a"
call echo %%a%%
)
pause

本回答被提问者采纳
第2个回答  2021-06-16

我是将返回值写入到文件,利用for循环读出来再赋值给变量a,迂回了下



@echo off

wmic diskdrive list brief |findstr Virtual|find /v /c "">%temp%\Vitual.txt

for /f %%i in (%temp%\Vitual.txt) do set a=%%i

echo VM Disk Num is:%a%

if %a% equ 0 (echo "Physical Machine") else (echo "Virtual Machine")

pause

第3个回答  2013-06-30
@ECHO OFF
FOR /f "skip=1 tokens=* delims=" %%a in ('wmic ENVIRONMENT WHERE "Name='path'and UserName='<System>'" GET VariableValue') do (
SET a=%%i)
PAUSE

追问

@ECHO OFF

FOR /f "skip=1 tokens=* delims=" %%a in ('wmic ENVIRONMENT WHERE "Name='path'and UserName='<System>'" GET VariableValue') do (

SET a=%%i)

PAUSE


其中的前面的%%a我改成了%%i,括号外我echo %a%。


运行,系统报错了

追答@ECHO OFF
FOR /f "skip=1 tokens=* delims=" %%i in ('wmic ENVIRONMENT WHERE "Name='path'and UserName='<System>'" GET VariableValue') do (
SET a=%%i
GOTO a
)
:a
ECHO %a%
PAUSE

相似回答