zhanlin1993 发表于 2016-11-23 09:18:40

【已解决】如何将cmd回显值返回给AU3变量

本帖最后由 zhanlin1993 于 2016-11-23 12:40 编辑

新手提问。。
希望将“wmic bios get serialnumeber”此命令发送到“cmd”,在将回显值赋给AU3的变量。
小弟做了两种方法,有些疑问,请大神指教。

1)将回显值输出到txt文档,再用FileReadLine,源码如下:
Local $sVarSerialNumber
RunWait(@ComSpec & " /c " & "wmic bios get serialnumber >temp.txt","",@SW_HIDE,15)
$sVarSerialNumber = FileReadLine("temp.txt",2)
FileDelete("temp.txt")
但是个人认为需要额外借用文本文件来获取变量值,有点绕。

2)后来在论坛上看到有用StdoutRead来实现,自己照着样子写了类似的,源码如下:
Local $sVarSerialNumber
Local $run=Run(@ComSpec & " /c " & "wmic bios get serialnumber /value","",@SW_HIDE,15)
ProcessWaitClose($run)
$sVarSerialNumber=StringTrimLeft(StringStripCR(StdoutRead($run)),15)
此源码也可以正常得出准确的主板序列号。但是对于字符串处理的那一段有些疑问:
"wmic bios get serialnumber /value"得出的回显信息格式是:


SerialNumber=XXXXXXX
所以就用了StringStrip去掉回车,再用StringTrimLeft去掉左边的指定长度的字符最后得出要的字符。
“SerialNumber=”这个长度应该是13的,为什么用13得到的是“r=XXXXXXX”,15才是正确的呢?



PS:以上是小弟能想到的获取回显的方法了,还有更好的方法吗?

水木子 发表于 2016-11-23 10:38:11

$iPID = Run(@ComSpec & ' /c ' & 'wmic bios get serialnumber /value', '', @SW_HIDE, 8)
ProcessWaitClose($iPID)

$aArray = StringRegExp(StdoutRead($iPID), '(?<==)\w+', 3)
MsgBox(0, 0, $aArray)

zhanlin1993 发表于 2016-11-23 11:48:13

回复 2# 水木子
$aArray = StringRegExp(StdoutRead($iPID), '(?<==)\w+', 3)
表达式的内容有些疑问,"?<=="的作用就是匹配“=”以后的字符,为什么还要再加“\w+”呢?

还有,将您的代码贴在源码里,貌似获取不到“=”以后的字符哦。

水木子 发表于 2016-11-23 11:51:02

本帖最后由 水木子 于 2016-11-23 11:56 编辑

(?<==)\w+
这个表达式怎么理解呢!我觉得应该是匹配的内容前面有个“=”号(得到的结果中不包含这个“=”号)
而我们需要得到的内容是\w+(一串字母+数字的组合)。
因为“=”号后面不光只有这串字符,还有其他的内容,比如空白符,回车符,换行符,只是我们没有看见而已,所以需要排除它们。

zhanlin1993 发表于 2016-11-23 12:09:24

回复 4# 水木子

soga。

/w+起到清除非字母,数字,下划线的作用。

谢谢解答啦~

cfanpc 发表于 2016-11-23 20:16:12

高手就是高手

jizai1024 发表于 2018-4-18 16:50:18

这个正好用到,之前都是只会写到文本里再读取……

redapple2008 发表于 2018-8-8 16:52:36

回显不错,我现在想怎么把命令发到dos里面去?
页: [1]
查看完整版本: 【已解决】如何将cmd回显值返回给AU3变量