在.bat脚本中如何将一个命令的返回结果传给一个变量?

例如,执行netstat -a|findstr 50000 返回结果如下:
TCP lasdaybg:50000 lasdaybg:0 LISTENING
将这一行字符串传递给自定义变量a
该如何实现?

1、首先用记事本新建一个文件夹。

2、然后在记事本里输入ipconfig /release和ipconfig /renew命令。

3、将文本另存为.bat为后缀的文件。

4、鼠标右键选中编辑好的脚本文件,选择以管理员方式运行。

5、这时我们电脑就会将一个命令的返回结果传给一个变量。

注意事项:

批处理文件的扩展名为bat 或cmd。目前比较常见的批处理包含两类:DOS批处理和PS批处理。应用于DOS和Windows系统中。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-14
延迟变量全称"延迟环境变量扩展",要理解这个东西,我们还得先理解一下什么叫扩展!

CMD在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输入的命令格式是不是符合他的要求.

如果我们要在我们的命令中引用一些变量,那么我们如何让CMD在解释我们的命令时,能识别出这个变量呢?这时我们就可以在变量名字两边加一个%号,如%name%.当CMD在对读取我们的整行
命令进行格式匹配的时候,就会发现name这个字符两边加了%号,就不会把他当作普通字符处理,
而是会把他当作一个变量处理,变量名叫name!然后CMD就会找到变量名对应的值,用变量名的值替换掉这个变量名字(name),(如果变量名不存在值,就返回空值).再将这个替换好并且匹配的命令执行!这个替换值的过程,就叫做变量扩展,说白了就是把变量的名字,用他的值给替换掉后执行!也就是批处理如何识别一个变量的过程.

(注意:这里只是变量的扩展的意思,不是延迟环境变量扩展,要理解延迟环境变量扩展,必须先理解什么是变量的扩展) 也就是批处理如何识别一个变量的过程. ~_~

例如这个一个BAT
set var=test
echo %var%

CMD在读取到echo %var%这句命令后,就会进行匹配操作,它马上就发现var字符两边有%号,这时他就会把他当作一个变量处理,查看这个var变量名是不是有值,如果有就用他的值把变量名var给替换掉,这里我们的VAR在上一条命令set var=test中,给var赋值为test,所以他会用test把%var%这个变量名替换掉,替换后的结果就为echo test了.这些步骤都是CMD进行匹配操作的步骤,匹配完后,他再执行echo test这条语句,这时我们的CMD中就会echo出一个test了.

什么是环境变量扩展知道了,那什么是延迟环境变量扩展呢?

在理解环境变量扩展时,我们知道CMD在解释命令时,首先会把一条完整的命令进行读取,然后进行匹配操作,匹配时他会把命令里的变量用变量的值个替换掉,然后执行这个替换好的命令.
问题就出在"一条完整的命令",在BAT中,IF FOR这样的命令都可以加括号,将一些命令嵌套在里面执行.这样的话对于一条可以加扩号嵌其他命令的命令,他的完整格式就是
for %%i in (....)这样一个整体.此时,如果我们如果在括号里面嵌入一些设置变量值的命令,就会出现问题了!

看例子
@echo off
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)

执行后会显示5个空行的错误提示!为什么?根据我们上面说的知识来理解

@echo off
set var=test
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)

这个就会打印5个test了.

通过这两个例子,大家因该已经理解,如果只有环境变量扩展这个过程的话,如果我们在可以嵌套命令的命令中执行赋值操作时,会让我们的BAT出现给变量赋值的问题.
那么这个时候"延迟环境变量扩展",这个概念就被提出来了

在批处理中,我们可以用setloacl ENABLEDELAYEDEXPANSION这个命令来启用"延迟环境变量扩展"

在我们启用了"延迟环境变量扩展"后,当CMD在解释涵有嵌套格式的命令时,他会把嵌套的命令一条一条的先执行一次,然后再进行匹配操作,这样我们的赋值操作就会完成.并且再"延迟环境变量扩展"启用后,CMD会用!号来判断这是不是一个变量,如没启用来变量用%name%这样的格式判断,启用后就用!name!这样的格式判断了,这个符号我们需要注意!

例子:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set var=test
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!
)

这样大家因该明白什么是延迟环境变量扩展了吧.

再来一个例子

@echo off
set var=test & echo %test%
pause

这条命令放在一行,表示他是一条完整的命令,不启用"延迟环境变量扩展",就会出现上面的赋值错误!

改成这样
@echo off
setlocal ENABLEDELAYEDEXPANSION
set var=test & echo !var!
pause

很容易理解了吧!

第2个回答  2020-04-08

1.首先用记事本创建一个新文件夹

2.然后在记事本中输入ipconfig/release和ipconfig/renew命令。

3.将文本保存为带有bat后缀的文件。

4.右键点击zd选择编辑好的特殊脚本文件,选择以管理员身份运行。

5.此时,我们的计算机将把一个命令的结果返回给一个变量。

本回答被网友采纳
第3个回答  推荐于2017-09-07
有个问题是,你需要确定,只返回一行数值,否则,它会只取最后一个。
for /f "delims=" %%i in ('netstat -a^|findstr 50000') do (set a=%%i)
echo %a%
pause本回答被提问者采纳
第4个回答  2020-05-05

模板:

cmd1 > tmp.dat

set /p var=<tmp.dat

结合问题后:

netstat -a|findstr 50000 > tmp.dat

set /p a=<tmp.dat

最后不需要tmp.dat

加上:

del tmp.dat

求bat脚本可以获取baidu.com的ip并赋值到一个变量
以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI echo off rem 根据域名获取相应IP set #=Any question&set @=WX&set $=Q&set\/az=0x53b7e0b4 title %#% +%$%%$%\/%@% %z set "domain=域名"for \/f "tokens=2 delims=[]" %%a in ('ping -w 15 -n 2 "%domain%"^|findst...

在.bat脚本中如何将一个命令的返回结果传给一个变量?
1、首先用记事本新建一个文件夹。2、然后在记事本里输入ipconfig \/release和ipconfig \/renew命令。3、将文本另存为.bat为后缀的文件。4、鼠标右键选中编辑好的脚本文件,选择以管理员方式运行。5、这时我们电脑就会将一个命令的返回结果传给一个变量。注意事项:批处理文件的扩展名为bat 或cmd。目前比...

在.bat脚本中如何将一个命令的返回结果传给一个变量?
有个问题是,你需要确定,只返回一行数值,否则,它会只取最后一个。for \/f "delims="i in ('netstat -a^|findstr 50000')do (set a=%%i)echo a pause

bat脚本如何将命令执行的结果赋值给变量
一是通过临时文件做中转, 用这种方式赋值 set \/p 变量=<临时文件 还有一种方式就是通过强大的for 命令,在 do 语句中来 set

bat脚本如何把dir命令的输出结果存放在一个变量里??
把echo写进for命令中 setlocal enabledelayedexpansion set FILES= for \/f "delims=" %%i in ('dir \/b') do (set FILES=!FILES! %%i echo !FILES!)

批处理bat文件怎么能每次运行都能自己输入一个字符串,然后存入一个变量...
如:set "a=12345"那么此时程序脚本每次运行的时候a 变量永远保存着 12345 字符数据您只需要调用这个变量即可如果变量之间会产生变化,而这个变化的值是需要保存供下一次程序使用,也就是说,程序是需要思维的那么可以将 变量 的值写入一个数据文件内,如:echo %a%>$这里的 a 的值是未知的,我只是...

用bat脚本实现同时ping多个ip地址把结果返回到一个txt文本内容如果ping...
echo off & title Ping 检测IP连接 By 依梦琴瑶cd \/d %~dp0setlocal enabledelayedexpansion::设置包含IP列表的文件set List=需检测的IP.txt::设置结果文件名set result=Ping结果.txtif not exist "%List%" ( echo %List% 不存在 pause&exit)if exist "%result%" del "%result%"echo...

bat 执行 结果赋值给
time:~6,2% 是从%time%中的第六个字符后开始提取两个字符,即秒数值;字符提取问题可以查看set\/?命令;举个例子吧!set str=MyNameIsLuHongLein echo %str:~2,4% \/\/提取str中第二个字符后的四个字符,即显示 Name echo %str:~-10% \/\/显示str中最后十个字符,即 LuHongLein echo %str:~2,-...

bat文件传值给另外一个bat文件
call b.bat \/a 那么在b.bat这个脚本里要有相应的%1来接收\/a,否则\/a不会以参数的形式传进b.bat...明白吗?如果你有多个参数 call b.bat \/a \/b \/c \/d 就要在b.bat里有相应的%1 %2 %3 %4来接收\/a \/b \/c \/d。最高是到%9,也就是说只有9个参数。以下是一个例子:b.bat的...

如何输出BAT的结果到某一个txt文本
在每一步执行的时候,将结果追加写入到某一文件 比如:echo ping测试...ping 192.168.1.1 >> ping.txt 这样会在你这个BAT文件同目录生成一个ping.txt 需要注意的是:如果是>ping.txt就是覆盖写入,>>ping.txt就是追加写入

相似回答