|
本帖最后由 sunkiss 于 2010-5-15 12:54 编辑
在网上找了个批处理,然后改了一下,在PE下用过能用不知道怎么改成AU3了,学些AU32天了,还是没学会!急着用没找到好办法,AU3有点难学,看来是没有速成的办法了!请高手帮忙吧!各位老大帮忙的时候别忘了给我这个菜鸟加上个注释啊!
这个批处理改的就是这个地址上看到的
http://hi.baidu.com/%C6%BD%B0%B2 ... 198d352797910f.html@echo off
for /f "skip=2 tokens=1,2" %%i in ('dsptw /a /pdr /y') do echo %%i %%j>>ppp.txt
for /f "tokens=1,2" %%i in ('type ppp.txt^|find /i "c:"') do set c=%%j
for /f "tokens=1,2" %%i in ('type ppp.txt^|find /i "d:"') do set d=%%j
for %%d in (c d e f g h i j k l m n o p q r s t u v w) do if exist %%d:\beifen\sys~1\GHOST.exe set disky=%%d:\
%disky%beifen\sys~1\GHOST.exe -CLONE,MODE=PDUMP,SRC=%c%,DST=%d%\beifen\sys~1\SYS.GHO -Z9 -AUTONAME -sure -rb -fro -quiet
在afan版版帮助下成功了许多了!就是还是不很明白!把代码分享给大家!我的是在PE下用,所以我把活动分区对应的盘符和那个N:N用PECMD.EXE写到系统环境变量可以随时调用。FileInstall('dsptw.exe', @TempDir & '\') ;将dsptw.exe文件打包进编译
FileInstall('PECMD.EXE', @TempDir & '\') ;将PECMD.EXE文件打包进编译
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0) ;于dos下隐藏运行dsptw生成信息文本
$str = FileRead(@TempDir & '\diskinfo.txt') ;读取文本
$sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)\h*\tA\t', 3) ;正则匹配活动分区,[从C到Z]、\t匹配一个制表符、\d、匹配一个数字字符、:???
If Not @error Then MsgBox(0, 0, '活动分区 ' & $sR[0] & ' No. ' & $sR[UBound($sR) - 1])
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $CP='&$sR[0]&'',"", @SW_HIDE)
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $HAO='&$sR[UBound($sR) - 1]&'',"", @SW_HIDE)
If Not @error Then MsgBox(0, 0, '活动分区 ' & $CP & ' No. ' & $HAO)
;$sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)', 3) ;正则匹配所有分区及位置
;If Not @error Then MsgBox(0, 0, '最后分区 ' & $sR[UBound($sR) - 2] & ' No. ' & $sR[UBound($sR) - 1])
;FileDelete(@TempDir & '\dsptw.exe') ;删除临时文件
;FileDelete(@TempDir & '\diskinfo.txt') ;删除临时文件
这个有GUI#include <Process.au3>
#include <GuiListView.au3>
#include <ListviewConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
FileInstall('PECMD.EXE', @TempDir & '\')
FileInstall('dsptw.exe', @TempDir & '\')
GUICreate("立信科技PE恢复系统", 545, 255)
$ListView1 = GUICtrlCreateListView('驱动器|分区编号|分区状态|卷标|已用空间(Mb)|剩余空间(Mb)', 5, 5, 535, 200, $LVS_EX_GRIDLINES, $LVS_REPORT)
$Bthf = GUICtrlCreateButton(' 还原系统 ', 10, 215, -1)
;$Btbf = GUICtrlCreateButton(' 备份系统 ', 110, -1)
$Btg = GUICtrlCreateButton('手动GHOST32', 85, 215, -1)
$Btp = GUICtrlCreateButton(' WINPM ', 210, -1)
$Btd = GUICtrlCreateButton(' DiskGenius ', 270, -1)
$BtSx = GUICtrlCreateButton('刷新/载入', 420, 215, -1)
$BtExit = GUICtrlCreateButton(' 退 出 ', 490, 215, -1)
GUISetState()
_ld()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Bthf
_CQHF()
FileDelete(@TempDir & '\diskinfo.txt')
Case -3, $BtExit
FileDelete(@TempDir & '\dsptw.exe')
FileDelete(@TempDir & '\diskinfo.txt')
Exit
Case -3, $Btg
Run(@ComSpec & ' /c ghost32.exe', @TempDir, 0)
FileDelete(@TempDir & '\dsptw.exe')
FileDelete(@TempDir & '\diskinfo.txt')
Exit
Case -3, $Btp
RunWait(@ComSpec & ' /c %systemroot%\WINPM\WINPM.EXE', @TempDir, 0)
FileDelete(@TempDir & '\diskinfo.txt')
_ld()
Case -3, $Btd
RunWait(@ComSpec & ' /c %IniDrv%\SYS\diskgen\DiskGenius.exe', @TempDir, 0)
FileDelete(@TempDir & '\diskinfo.txt')
_ld()
Case $BtSx
FileDelete(@TempDir & '\diskinfo.txt')
_ld()
EndSwitch
WEnd
Func _ld()
_GUICtrlListView_DeleteAllItems($ListView1)
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
Local $str = FileRead(@TempDir & '\diskinfo.txt'), $i, $dt
Local $array = StringRegExp($str, '([^\t\r]*)[\t|\r]', 3)
If @error Then Return MsgBox(48, '错误提示', '请确认当前系统分区的正确性')
For $i = 2 To UBound($array) - 7 Step 6
$dt = $array[$i] & '|' & $array[$i + 1] & '|' & $array[$i + 2] & '|' & $array[$i + 3] & '|' & $array[$i + 4] & '|' & $array[$i + 5]
GUICtrlCreateListViewItem($dt, $ListView1)
Next
EndFunc ;==>_ld
Func _CQHF()
Local $varrr = DriveGetDrive('all'), $gho = '\SYS\WINXPSP3.GHO'
For $i = 2 To $varrr[0]
If FileExists($varrr[$i] & $gho) Then ExitLoop
Next
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR > diskinfo.txt', @TempDir, 0)
Local $strr = FileRead(@TempDir & '\diskinfo.txt')
Local $sR = StringRegExp($strr, '([C-Z]:)\t(\d:\d+)\h*(\tA)\t', 3)
If @error Then
MsgBox(48, ' 错误提示', '请确认当前系统分区的正确性')
Else
Local $RS = $sR[UBound($sR) - 2]
Select
Case $RS = "3:1"
$flag = MsgBox(1, "错误提示", '系统检测到您的电脑有多块硬盘(大于等于2块),不能自动进行GHOST还原.')
Case $RS = "1:1"
$flag = MsgBox(1, "请确认当前系统分区的正确性", '本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & '对应的GHOST编号为:' & $sR[1] & '' & @CR & @CR & 'WINXPSP3.GHO的路径是:' & @CR & @CR & ''&$varrr[$i]&$gho&'')
Case $RS = "2:1"
$flag = MsgBox(1, "请确认当前系统分区的正确性", ' 本地活动磁盘的盘符是:' & $sR[0] & '' & @CR & @CR & ' 对应的GHOST编号为:' & $sR[1] & '')
EndSelect
If $flag = 1 Then
Local $flagg=MsgBox(1, "点击确定进行还原操作", '马上要进行还原操作,请确认文件已经备份' & @CR & @CR & ' 数据无价,请谨慎操作。')
If $flagg = 1 Then
Run(@ComSpec & ' /c %systemroot%\GHOST32.EXE -clone,mode=pload,src='&$varrr[$i]&'\SYS\WINXPSP3.GHO:1,dst=' & $sR[1] & ' -crcignore -sure -rb', "", 0)
Exit
EndIf
EndIf
EndIf
EndFunc ;==>_CQHF
|
评分
-
查看全部评分
|