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

author author     2023-03-04     648

关键词:

例如,执行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系统中。

参考技术A 延迟变量全称"延迟环境变量扩展",要理解这个东西,我们还得先理解一下什么叫扩展!

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

很容易理解了吧!

参考技术B

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

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

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

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

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

参考技术C 有个问题是,你需要确定,只返回一行数值,否则,它会只取最后一个。
for /f "delims=" %%i in ('netstat -a^|findstr 50000') do (set a=%%i)
echo %a%
pause本回答被提问者采纳
参考技术D

模板:

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脚本如何将命令执行的结果赋值给变量

这个问题也曾困扰我很久,后来发现只有两条路可走一是通过临时文件做中转,用这种方式赋值set/p变量=<临时文件还有一种方式就是通过强大的for命令,在do语句中来set参考技术A什么意思?贴个代码 查看详情

求问bat脚本如何自动执行adbshell以后的命令

...权限然后自动运行linux代码这是无法实现的。你无法在bat脚本中运行交互式shell命令,你的命令无法发送进入。bat脚本运行时,是在CMD的环境下运行,它的命令解释器是cmd。而su在shell环境下执行的,它的命令解释器是shell下的"... 查看详情

如何在 windows 的变量中获取命令的结果?

...04:07【问题描述】:我希望将命令的结果作为Windows批处理脚本中的变量获取(请参阅howtogettheresultofacommandinbash以获取等效的bash脚本)。首选可以在.bat文件中运行的解决方案,但也欢迎使用其他常 查看详情

bat脚本获取exe返回值errorlevel的参数和设定

ErrorLevel的参数和设定1、实例一bat脚本中常用%errorlevel%表达上一条命令的返回值,用于判断。比如:cmd1if%errorlevel%==1(cmd2)//如果cmd1返回的错误码值等于1时,将执行cmd2操作2、实例二在for循环中或if语句中多条命令都需要获取返... 查看详情

在一个脚本中捕获多个命令

】在一个脚本中捕获多个命令【英文标题】:Catchmultiplecommandsinonescript【发布时间】:2013-03-2009:47:16【问题描述】:我使用LANDesk来管理我公司的设备。这个工具很棒,但它无法向设备所有者发送电子邮件。因此,我创建了一个名... 查看详情

将time的结果放入到文件中

...me命令返回的是标准错误输出!实验准备:1.有一个sleep.sh脚本,脚本内容如下:2. 查看详情

如何在shell脚本中,判断一个基本命令执行是不是成功

.../etc/password的最后一列root:x:0:0:root:/root:/bin/bash然后在shell脚本第一行就写上什么shell#!/bin/bash 参考技术C输入mkdir/home/testuser通过返回结果,我可以看到执行是否成功但是如果这个mkdir在脚本中,我如何知道mkdir是否执行成功?因为我... 查看详情

gnome编辑器--gedit构建基本脚本

...编辑器窗口中按标签化的窗口来显示每个文件。 shell脚本的关键在于输入多个命令并处理每个命令的结果,即使有可能将一个命令的结果传给另一个命令。shell允许你只用一步就将多个命令串连起来使用。如:date;who你可以... 查看详情

bat常用命令详解

...息>>文件】,表示将新的信息追加到文档后。echoon(脚本默认),bat脚本运行后,每条命令的结果都会打印在屏幕上echooff会关闭回显,也就是脚本运行时不在打印每个命令,只能打印一些日志(如echo的输出结果)和一些错... 查看详情

<script></script>中的一个变量值如何传给<%%>中的一个变量

<script></script>中的一个变量值如何传给<%%>中的一个变量例如:<script>varn="bianliang"<%dimm%></script>如何把n的值传给m这种方法是不可能实现的。因为<%%>中的代码是在服务器端执行的,然后将执行... 查看详情

如何将批处理命令的结果存储在哪里?

...】:2021-07-2914:07:08【问题描述】:跑步WHEREpython在我的bat脚本中,我给了我两个指向两个不同python实例的文件路径C:~\\AppData\\Local\\Programs\\Python\\Python38\\python.exeC:~\\AppData\\Lo 查看详情

bat/cmd中将命令执行结果赋值给变量

...a1、将我们写好的定期清除旧数据的bat批处理文件拖到cmd命令窗口中。2、执行返回乱码报错,提示乱码字段非内部或外部命令,也不是科运行的程序或批处理文件。3、我们打开批处理文件,批处理文件是用来定时删除1天前的zip... 查看详情

shell脚本的一个返回值问题。

...般输出0表示执行成功,1-125的值表示表示错误码,意味着脚本执行出了问题。在Bash中,当错误发生在致命信号时,bash会返回128+signalnumber做为返回值。如果找不到命令,将会返回127。如果命令找到了,但该命令是不可执行的,将... 查看详情

bat调用另外一个bat,如何获得执行结果

  这里介绍的方法是,使用变量。脚本1调用脚本2脚本2设置变量SETRESULT2=123脚本1检查结果ECHO%RESULT2% 查看详情

bat调用另外一个bat,如何获得执行结果

  这里介绍的方法是,使用变量。脚本1调用脚本2脚本2设置变量SETRESULT2=123脚本1检查结果ECHO%RESULT2% 查看详情

求脚本(bat)基本命令

求WINDOWS脚本(Shell语言)的一些基本命令,要附带说明。邮箱lhy1997926@163.com1.“@echooff”--我们所写的BAT一开始一般都有这一句,这一句的作用是:使所有的命令响应隐藏。“@”--本行命令不回显。(本来如果你用echooff就可以了... 查看详情

如何在shell脚本中,判断一个基本命令执行是不是成功

参考技术A每一条基本命令执行后都有一个返回码,该返回码是用$?表示,执行成功的返回码是0,例如:if[$?-ne0];then上一命令执行失败时的操作else上一命令执行成功时的操作fi 查看详情

如何将命令存储在 shell 脚本的变量中?

】如何将命令存储在shell脚本的变量中?【英文标题】:HowcanIstoreacommandinavariableinashellscript?【发布时间】:2011-08-0217:02:45【问题描述】:我想在变量中存储一个稍后使用的命令(不是命令的输出,而是命令本身)。我有一个简单... 查看详情