evilwz 发表于 2022-5-16 20:59:36

想用StdoutRead读取diskpart的窗口信息,但不成功,故来求助高手。

各位高手:
      本人知道StdoutRead能够读取命令行的窗口信息,以前用的也正常,可以读取DISM的窗口信息,当时的代码如下:
#RequireAdmin
Global Const $dism=IniRead($INI,"Path","dism","")
Global $info,$line,$lineplus
$info=Run($Root & "\" & $dism & "\dism.exe /get-imageinfo /imagefile:.\" & $wim,$Root & "\" & $CDTarget & "\sources",@SW_HIDE,15)
$line=""
Do
$lineplus=StdoutRead($info)
If $lineplus="" Then
ContinueLoop
EndIf
$line &= $lineplus
Until @error=1
StdioClose($info)
Msgbox(0,"",$line)
      当时用以上代码可以很顺利的读取DISM的窗口信息。
      但是,最近想用StdoutRead读取diskpart的窗口信息,但不成功,末尾Msgbox语句总是显示一个随机数字,有时4位,有时5位。下面是我的diskpart代码:
#RequireAdmin
#include<Constants.au3>
Global $info,$line,$lineplus
$info=Run(@ComSpec & " /c diskpart.exelist volume", "C:\windows\system32", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
;StdinWrite($info,"list volume")
;StdinWrite($info)
$line=""
Do
$lineplus=StdoutRead($info)
If $lineplus="" Then
ContinueLoop
EndIf
$line &= $lineplus
Until @error=1
StdioClose($info)
MsgBox(0,"",$info)
      特别说明,本人知道diskpart有脚本模式,但还要生成单独的txt文件。所以我还是希望用StdoutRead读取diskpart的窗口信息,这样不用生成单独的txt文件。请问各位高手,代码应该如何写,特别是Run(@ComSpec & " /c diskpart.exelist volume", "C:\windows\system32", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)语句这一行,应该如何表达,多谢!

zghwelcome 发表于 2022-5-16 21:16:10




#RequireAdmin
Local $iPid = Run(@ComSpec & " /c echo,list volume|diskpart.exe", "C:\windows\system32", @SW_HIDE, 0x8)
ProcessWaitClose($iPid)
Local $sInfo = BinaryToString(StdoutRead($iPid, 1, 1), 1)
MsgBox(0, "", $sInfo)


haijie1223 发表于 2022-5-16 23:35:24

zghwelcome 发表于 2022-5-16 21:16


同义九,汝何秀

gapkiller 发表于 2022-5-17 09:12:20

zghwelcome 发表于 2022-5-16 21:16


批处理功底不错....有大厂的感觉{:1_206:}

evilwz 发表于 2022-5-17 12:36:04

zghwelcome 发表于 2022-5-16 21:16


十分感谢zghwelcome,十分欣赏您的批处理功底!

afan 发表于 2022-5-17 22:55:53

养成好习惯,及时结贴加注已解决。
页: [1]
查看完整版本: 想用StdoutRead读取diskpart的窗口信息,但不成功,故来求助高手。