找回密码
 加入
搜索
查看: 715|回复: 6

[网络通信] [已解决] Dism命令释放wim用AU3如何显示实时进度条谢谢?

[复制链接]
发表于 2023-3-28 22:33:26 | 显示全部楼层 |阅读模式
本帖最后由 令狐大虾 于 2023-4-20 00:45 编辑

如题,懂得朋友帮忙一下。下面只会一个简单的,但是不完美
Run(@ComSpec & ' /c ' & ' @echo off&color 0e&echo 正在释放系统安装文件...请勿关闭此窗口&Dism /apply-image /imagefile:SystemFiles\64w10.wim /index:1 /ApplyDir:C:','',@SW_HIDE)        
ProgressOn('', '')
For $i = 1 to 1000
    Sleep(2000)
        If Not ProcessExists('dism.exe') Then ExitLoop
    ProgressSet($i,'安装中:'&$i&'%')
Next
ProgressSet(100 , '完成')
Sleep(500)
ProgressOff()
下面这个代码是问人家的,但是不会怎么添加进度条进去啊,大伙帮帮忙啊
#include <Constants.au3>

Local $p = Run(@ComSpec & " /c Dism /apply-image /imagefile:64w7.wim /index:1 /ApplyDir:7","",@SW_HIDE,15)
Local $line

While 1
$line = StdoutRead($p)
If @error Then ExitLoop
  ;正则取回显,进度条控件
Wend


发表于 2023-3-30 11:13:15 | 显示全部楼层
楼主看下帮助中StdoutRead的用法,是可以读取到dism的进度的。

只是在我这里dism工作并不稳定,后来我就用第三方工具wimlib,获取进度的方法一样为使用StdoutRead
 楼主| 发表于 2023-4-3 23:06:32 | 显示全部楼层
bfgxp 发表于 2023-3-30 11:13
楼主看下帮助中StdoutRead的用法,是可以读取到dism的进度的。

只是在我这里dism工作并不稳定,后来我就 ...

谢谢,基础差,可否发个例子啊
发表于 2023-4-4 18:58:53 | 显示全部楼层
令狐大虾 发表于 2023-4-3 23:06
谢谢,基础差,可否发个例子啊

au3的好处就是帮助文件中对每一个函数都有示例,直接看帮助吧
 楼主| 发表于 2023-4-19 01:08:59 | 显示全部楼层
本帖最后由 令狐大虾 于 2023-4-19 01:12 编辑
bfgxp 发表于 2023-3-30 11:13
楼主看下帮助中StdoutRead的用法,是可以读取到dism的进度的。

只是在我这里dism工作并不稳定,后来我就 ...
帮忙帮我把这个完善一下啊谢谢
#include <Constants.au3>

Local $p = Run(@ComSpec & " /c Dism /apply-image /imagefile:64w7.wim /index:1 /ApplyDir:7","",@SW_HIDE,15)
Local $line

While 1
$line = StdoutRead($p)
If @error Then ExitLoop
    ;正则取回显,修改进度条控件 
<p style="line-height: 30px; text-indent: 2em;"></p>Wend 
发表于 2023-4-19 09:39:01 | 显示全部楼层
Func _dismA($imgFile, $idex, $target, $eftxt)
        $DISMp = Run(@ComSpec & " /c " & 'Dism.exe /Apply-Image /ImageFile:"' & $imgFile & '" /index:' & $idex & ' /ApplyDir:' & $target, "", "", 2 + 4)
        Dim $baifie = 0
        While ProcessExists($DISMp)
                $line = StdoutRead($DISMp, 5)
                $bfb = StringRegExp($line, "\d+(?=\.\d\%)", 3)
                If Not @error Then
                        If Int($bfb[UBound($bfb) - 1]) > Int($baifie) Then        $baifie = $bfb[UBound($bfb) - 1]
                EndIf
                Sleep(500)
        WEnd
EndFunc   ;==>_dismA

点评

谢谢,虽然没什么用  发表于 2023-4-20 00:44
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 17:18 , Processed in 0.082547 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表