找回密码
 加入
搜索
楼主: sunkiss

[AU3基础] 关于dsptw分区的bat转au3!【已经解决】

 火.. [复制链接]
 楼主| 发表于 2010-5-13 20:29:33 | 显示全部楼层
睡觉去了,明天再弄吧!刚刚发现在问题!在有些电脑上的,我的U盘进PE后会显示1:1,而本地硬盘显示2:1,这样分区表不知道有什么变化,明天用我那台电脑试试!
 楼主| 发表于 2010-5-14 11:42:24 | 显示全部楼层
本帖最后由 sunkiss 于 2010-5-14 11:49 编辑

还是不行!G: 1:5是我量产的USB-CDROM H:是剩余的空间量产的可移动磁盘,然后做了引导。i: j:是我的一动硬盘,上图看看!
怎么解决啊!
  1. Drive   No.     Active  VolumeLabe      Total (Mb)     Free (Mb)
  2. C:        1:1         A                                49010          32708  
  3. D:        1:3                                          100006         10550  
  4. E:        1:4                                          105230         31560  
  5. F:        1:2                                          980            195   
  6. G:        1:5                  昊宇科技                53             0      
  7. H:        3:1         A        昊宇科技                7420           2231   
  8. I:        2:3                                          102400         71459  
  9. J:        2:4                                          317989         57181  
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-5-14 11:55:40 | 显示全部楼层
还是不熟悉正则啊!
$sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)\h*\tA\t', 3)
将3改成1和2都能正确显示!改成4直接不显示!
发表于 2010-5-14 12:00:36 | 显示全部楼层
  1. FileInstall('dsptw.exe', @TempDir & '\') ;将dsptw.exe文件打包进编译
  2. RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0) ;于dos下隐藏运行dsptw生成信息文本
  3. $str = FileRead(@TempDir & '\diskinfo.txt') ;读取文本
  4. $sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)\h*\tA\t', 3) ;正则匹配活动分区
  5. If Not @error Then MsgBox(0, 0, '活动分区 ' & $sR[0] & ' No. ' & $sR[1])
  6. FileDelete(@TempDir & '\dsptw.exe') ;删除临时文件
  7. FileDelete(@TempDir & '\diskinfo.txt') ;删除临时文件
复制代码
 楼主| 发表于 2010-5-14 12:39:42 | 显示全部楼层
本帖最后由 sunkiss 于 2010-5-14 12:47 编辑

厉害,解决了!你赶快收我为徒吧!你家在哪里?我去请你吃饭去!
刚刚发现28#republican 发的那个图那样显示很好,有没有错误一看就知道,可惜以我现在的技术是妄想!等我学习学习也试着弄弄,哈哈!
弄到这样我已经很满意了
发表于 2010-5-14 13:46:42 | 显示全部楼层
那个不难
  1. #include <GuiListView.au3>

  2. FileInstall('dsptw.exe', @TempDir & '\')
  3. GUICreate("测试", 400, 200)
  4. $ListView1 = GUICtrlCreateListView('Drive|No.|Active|VolumeLabe|Total (Mb)|Free (Mb)', 5, 5, 390, 150)
  5. $BtSx = GUICtrlCreateButton('刷新/载入', 200, 165, 90, 25)
  6. $BtExit = GUICtrlCreateButton('退出', 300, 165, 90, 25)
  7. GUISetState()
  8. _ld()

  9. While 1
  10.         $nMsg = GUIGetMsg()
  11.         Switch $nMsg
  12.                 Case -3, $BtExit
  13.                         FileDelete(@TempDir & '\dsptw.exe')
  14.                         FileDelete(@TempDir & '\diskinfo.txt')
  15.                         Exit
  16.                 Case $BtSx
  17.                         _ld()
  18.         EndSwitch
  19. WEnd

  20. Func _ld()
  21.         _GUICtrlListView_DeleteAllItems($ListView1)
  22.         RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
  23.         Local $str = FileRead(@TempDir & '\diskinfo.txt'), $i, $dt
  24.         Local $array = StringRegExp($str, '([^\t\r]*)[\t|\r]', 3)
  25.         If @error Then Return MsgBox(48, 0, '错误')
  26.         For $i = 2 To UBound($array) - 7 Step 6
  27.                 $dt = $array[$i] & '|' & $array[$i + 1] & '|' & $array[$i + 2] & '|' & $array[$i + 3] & '|' & $array[$i + 4] & '|' & $array[$i + 5]
  28.                 GUICtrlCreateListViewItem($dt, $ListView1)
  29.         Next
  30. EndFunc   ;==>_ld
复制代码
 楼主| 发表于 2010-5-14 16:57:44 | 显示全部楼层
本帖最后由 sunkiss 于 2010-5-14 16:59 编辑

哈哈,有学习了,我是了一下很好用呵呵,我吧版版帮我弄的代码加进去了,还很好用!呵呵!
只是还有N多地方不懂正在啃帮助!
 楼主| 发表于 2010-5-14 18:11:39 | 显示全部楼层
老师,我又遇到问题了!
  1. 1:RunWait(@ComSpec & ' /c "%systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=%hao% -crcignore -sure -rb"', "", 0)
  2. 2:run(@ComSpec & ' /c ' & '%IniDrv%\SYS\ghost.cmd', "", 0)
  3. 3:_nDOS("%IniDrv%\SYS\ghost.cmd")
复制代码
以上代码都不能运行成功,1:那一条可以运行,但是GHOST报错,':'就是这个错误、2:、3:运行了没什么动静。
ghost.cmd的代码是
  1. @echo off
  2. %systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=%hao% -crcignore -sure -rb
  3. exit
复制代码
单独运行ghost.cmd是成功的!
发表于 2010-5-14 18:24:24 | 显示全部楼层
  1. $g = '%systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=%hao% -crcignore -sure -rb'
  2. RunWait(@ComSpec & ' /c ' & $g, "", 0)
复制代码
这样呢?
 楼主| 发表于 2010-5-14 18:33:56 | 显示全部楼层
回复 39# afan

还是不行!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-5-14 18:35:30 | 显示全部楼层
我下班了,我明天再接着研究吧!下面是我在你基础上添加了代码!
  1. #Region ;**** 参数创建于 ACNWrapper_GUI ****
  2. #AutoIt3Wrapper_outfile=立信科技.exe
  3. #AutoIt3Wrapper_Res_Fileversion=0.0.0.0
  4. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
  5. #include <Process.au3>
  6. #include <GuiListView.au3>
  7. #include <ListviewConstants.au3>
  8. #include <GUIConstantsEx.au3>
  9. #include <WindowsConstants.au3>
  10. FileInstall('PECMD.EXE', @TempDir & '\')
  11. FileInstall('dsptw.exe', @TempDir & '\')
  12. GUICreate("立信科技PE恢复系统", 545, 255)
  13. $ListView1 = GUICtrlCreateListView('驱动器|分区编号|分区状态|卷标|已用空间(Mb)|剩余空间(Mb)', 5, 5, 535, 200, $LVS_EX_GRIDLINES, $LVS_REPORT)
  14. $Bthf = GUICtrlCreateButton(' 还原系统 ', 10, 215, -1)
  15. ;$Btbf = GUICtrlCreateButton(' 备份系统 ', 110, -1)
  16. $Btg = GUICtrlCreateButton('手动GHOST32', 85, 215, -1)
  17. $Btp = GUICtrlCreateButton(' WINPM ', 210, -1)
  18. $Btd = GUICtrlCreateButton(' DiskGenius ', 270, -1)
  19. $BtSx = GUICtrlCreateButton('刷新/载入', 420, 215, -1)
  20. $BtExit = GUICtrlCreateButton(' 退 出 ', 490, 215, -1)
  21. GUISetState()
  22. _ld()

  23. While 1
  24.         $nMsg = GUIGetMsg()
  25.         Switch $nMsg
  26.                 Case $Bthf
  27.                         _CQHF()
  28.                         ;Run(@ComSpec & ' /c %systemroot%\GHOST32.EXE -clone,mode=pload,src=%CurDrv%\SYS\WINXPSP3.GHO:1,dst=%act% -crcignore -sure -fx', @TempDir, 0)
  29.                         FileDelete(@TempDir & '\diskinfo.txt')
  30.                 Case -3, $BtExit
  31.                         FileDelete(@TempDir & '\dsptw.exe')
  32.                         FileDelete(@TempDir & '\diskinfo.txt')
  33.                         Exit
  34.                 Case -3, $Btg
  35.                         Run(@ComSpec & ' /c ghost32.exe', @TempDir, 0)
  36.                         FileDelete(@TempDir & '\dsptw.exe')
  37.                         FileDelete(@TempDir & '\diskinfo.txt')
  38.                         Exit
  39.                 Case -3, $Btp
  40.                         RunWait(@ComSpec & ' /c %systemroot%\WINPM\WINPM.EXE', @TempDir, 0)
  41.                         FileDelete(@TempDir & '\diskinfo.txt')
  42.                         _ld()
  43.                 Case -3, $Btd
  44.                         RunWait(@ComSpec & ' /c %IniDrv%\SYS\diskgen\DiskGenius.exe', @TempDir, 0)
  45.                         FileDelete(@TempDir & '\diskinfo.txt')
  46.                         _ld()
  47.                 Case $BtSx
  48.                         FileDelete(@TempDir & '\diskinfo.txt')
  49.                         _ld()
  50.         EndSwitch
  51. WEnd

  52. Func _ld()
  53.         _GUICtrlListView_DeleteAllItems($ListView1)
  54.         RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
  55.         Local $str = FileRead(@TempDir & '\diskinfo.txt'), $i, $dt
  56.         Local $array = StringRegExp($str, '([^\t\r]*)[\t|\r]', 3)
  57.         If @error Then Return MsgBox(48, '错误提示', '请确认当前系统分区的正确性')
  58.         For $i = 2 To UBound($array) - 7 Step 6
  59.                 $dt = $array[$i] & '|' & $array[$i + 1] & '|' & $array[$i + 2] & '|' & $array[$i + 3] & '|' & $array[$i + 4] & '|' & $array[$i + 5]
  60.                 GUICtrlCreateListViewItem($dt, $ListView1)
  61.         Next

  62. EndFunc   ;==>_ld



  63. Func _CQHF()
  64.         Dim $flag
  65.         $flagg = ""
  66.         ;_GUICtrlListView_DeleteAllItems($ListView1)
  67.         RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
  68.         Local $strr = FileRead(@TempDir & '\diskinfo.txt')
  69.         Local $sR = StringRegExp($strr, '([C-Z]:)\t(\d:\d+)\h*(\tA)\t', 3)
  70.         If @error Then
  71.                 MsgBox(48, ' 错误提示', '请确认当前系统分区的正确性')
  72.         Else
  73.                 Local $RS = $sR[UBound($sR) - 2]
  74.                 Select
  75.                         Case $RS = "3:1"
  76.                                 $flag = MsgBox(1, "错误提示", '系统检测到您的电脑有多块硬盘(大于等于2块),不能自动进行GHOST还原.')
  77.                         Case $RS = "1:1"
  78.                                 $flag = MsgBox(1, "请确认当前系统分区的正确性", '  本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & '  对应的GHOST编号为:' & $sR[1] & '')
  79.                                 ;$flag = MsgBox(1, "请确认当前系统分区的正确性", '  当前系统检测U盘分区编号是1:1 ' & @CR & @CR & '  本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & '  对应的GHOST编号为:' & $sR[1] & '')
  80.                         Case $RS = "2:1"
  81.                                 ;$flag = MsgBox(1, "请确认当前系统分区的正确性", '  当前系统检测U盘分区编号是2:1 ' & @CR & @CR & '  本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & '  对应的GHOST编号为:' & $sR[1] & '')
  82.                                 $flag = MsgBox(1, "请确认当前系统分区的正确性", '  本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & '  对应的GHOST编号为:' & $sR[1] & '')
  83.                                 ;$flag = MsgBox(1, "请确认当前系统检测磁盘分区的正确性", '  本地活动磁盘的盘符是:' & $sR[0] & ''& @CR & @CR &'  对应的GHOST编号为:'& $sR[1] & ''& @CR & @CR &'  当前系统检测U盘分区编号是2:1 ' & @CR & @CR &'  驱动器  分区编号  分区状态' & @CR & @CR & '    ' & $sR[0] & '       ' & $sR[1] & '     ' & $sR[2] & '  ')
  84.                 EndSelect
  85.                                 If $flag = 1 Then
  86.                                         ;RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $CP=' & $sR[0] & '', "", @SW_HIDE)
  87.                                         RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $HAO=' & $sR[1] & '', "", @SW_HIDE)
  88.                                         MsgBox(1, "点击确定进行还原操作", '马上要进行还原操作,请确认文件已经备份' & @CR & @CR & '        数据无价,请谨慎操作。')
  89.                                         $g = '%systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=%hao% -crcignore -sure -rb'
  90.                                         RunWait(@ComSpec & ' /c ' & $g, "", 0)
  91.                                 EndIf
  92.         EndIf
  93. EndFunc   ;==>_CQHF
复制代码
 楼主| 发表于 2010-5-15 08:42:19 | 显示全部楼层
本帖最后由 sunkiss 于 2010-5-15 10:03 编辑

将$g = '%systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=%hao% -crcignore -sure -rb'

里面的%IniDrv%换成d:把%hao%换成1:1成功,我再试试
好奇怪啊!系统变量%hao%=1:1是没错的,CMD下ECHO %hao% 就是1:1但是语句里%hao%出错!将%hao%换成'&$sR[1]&'成功!我以为是环境变量的原因!
我用$gpml = EnvGet("IniDrv")然后把%IniDrv%换成'&$gpml&'又出错了!提示找不到文件,一看是盘符出错了!郁闷
  1. $gpml = EnvGet("IniDrv")
  2. MsgBox(4096, "路径变量为:", $gpml)
复制代码
得到是空值!然而,
  1. echo %inidrv%
复制代码
得到的结果是d:
用%IniDrv%会提示X:\XXXXX的错误

经过研究改进我更郁闷了!
ghost提示d:\sys\winxpsp3.gho有问题,打不开!其实用ghost.cmd这个是可以的!郁闷!
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $HAO=' & $sR[1] & '', "", @SW_HIDE)
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI ', "", @SW_HIDE) ;这里是刷新环境变量!我刚加的,现在可以提示D:了,但是还是错误
%systemroot%\GHOST32.EXE -clone,mode=pload,src=%IniDrv%\SYS\WINXPSP3.GHO:1,dst=' & $sR[1] & ' -crcignore -sure -rb
  1. $bl=EnvGet("inidrv")
  2. MsgBox(4096,"提示",$bl)
复制代码
得到的也是空!郁闷由于目录不确定在PE下%IniDrv%这个变量正好是正确的!要不然就要搜索文件然后确定目录了!
发表于 2010-12-29 09:06:25 | 显示全部楼层
学习了,,完整的代码呢。
发表于 2011-5-21 14:23:13 | 显示全部楼层
正则表达式比较强大。
发表于 2011-12-27 13:27:20 | 显示全部楼层
强, 这个不错。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2026-9-23 17:41 , Processed in 0.057602 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

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