case 发表于 2012-12-1 22:36:11

一批处理转AU3代码

本帖最后由 case 于 2012-12-1 23:17 编辑

小弟AU3学得不好,有好多思路都没有,也不知道用什么函数可以达到想要的目的

这是批处理代码.作用是一键GHOST安装系统我想用AU3来实现.@echo off
set v=0
set w=0
set x=0
set y=0
set z=0
set g=0
for /f "eol=D tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 delims=[]\ " %%a in ('y:\op\GHOST\omnifs32.exe info') do (
if %%i==CASE_Z set g=%%d
if %%a%%i==1.1:CASE_Z set y=1
if %%a%%i==2.1:CASE_Z set x=1
if %%a==2.1: set v=1
if %%a==1.1: set v=1
if %%a==3.1: set z=1
if %%a==1.2: set w=1
if %%a==2.2: set w=1
)


if %v%==0 call :nohd
if %z%==1 call :fail
if %w%==0 call :fenqu
if %x%==1 call :more
if %y%==1 call :less

goto error
pause>>nul

:fail
pecmd MESS 存在2个或更多硬盘,为确保数据安全,请手动运行Ghost. @出错啦!#OK *10000
goto end

:less
y:\op\GHOST\GHOST32_1151.exe -noide -clone,mode=pload,dst=2:1,src=%g%\system\CASE3.GHO:1 -batch -sure -rb
goto end

:more
y:\op\GHOST\GHOST32_1151.exe -noide -clone,mode=pload,dst=1:1,src=%g%\system\CASE3.GHO:1 -batch -sure -rb
goto end

:fenqu
pecmd MESS 请检查硬盘是否已经分区或存在问题. @出错啦!#OK *10000
goto end

:nohd
pecmd MESS 没有找到硬盘. @出错啦!#OK *10000
goto end

:error
pecmd MESS 请尝试修改U盘盘符为CASE_Z和重新写U盘引导. @未知错误!#OK *15000
goto end

:end
exit例子 omnifs32.exe info读取硬盘信息如下:
Disk: 1 (298.09GB) M:
    1.1: (   20GB) Active Volume NTFS l:
    1.2: ( 120.01GB) Volume NTFS l:
    1.3: (   60GB) Volume NTFS l:
    1.4: (   90GB) Volume NTFS l:
         (31.50KB) Unused Space
    1.5: (   8.07GB) Diag Hidden Volume FAT32 l:
         (   1.46MB) Unused Space
Disk: 2 (14.20GB) M:
    2.1: (14.20GB) Active Volume FAT32 l: Removable Drive
因为有时候U盘可能是Disk: 1,之前是靠CASE_Z来判断U盘是HD0,还是HD1.
我也搜索了关于GHOST的一些帖子,也看到了P大的SetupApi.au3,_CM_Get_Drive_Disk_Number,可是不知道怎么才能用才能得到U盘是HD0还是HD1
FileReadLine
DriveGetDrive
这些好像都不能得到U盘是HD0还是HD1
其实我想 或者用正则得到读取      
2.1: (14.20GB) Active Volume FAT32 l: Removable Drive

哪位大大给个思路...

afan 发表于 2012-12-1 23:14:11

Local $Str = FileRead('info.txt')
Local $aInfo = StringRegExp($str, '(?mi)^\h+(\d+\.1):.+?\[(\w):\\.+?Removable Drive(?=\v|$)', 3)
If Not @Error Then MsgBox(64, 'U盘信息', '磁盘: ' & $aInfo & @CRLF & '盘符: ' & $aInfo)

case 发表于 2012-12-1 23:25:06

回复 2# afan


    A版好快,我试了一下,这代码没能正常运行.

afan 发表于 2012-12-1 23:31:13

回复 3# case


    贴出来的info可能已经与实际有差,改一下试试Local $aInfo = StringRegExp($str, '(?mi)^\h+(\d+\.1):.+?\[(\w):\\.+?Removable Drive\h*(?=\v|$)', 3)

case 发表于 2012-12-1 23:38:33

回复 4# afan


    谢谢A版, 这行代码可行的,我还要好好的学习一下正则啊.每次遇到这样的问题自己都无法解决.你真的帮我的很多次了,再次谢谢.

afan 发表于 2012-12-1 23:47:10

回复afan


    谢谢A版, 这行代码可行的,我还要好好的学习一下正则啊.每次遇到这样的问题自己都无法 ...
case 发表于 2012-12-1 23:38 http://www.autoitx.com/images/common/back.gif


    不用客气~ P版的也可以试试#include <SetupAPI.au3>

Local $aDriveU = DriveGetDrive('Removable')
If @error Then Exit MsgBox(0, '', '无U盘')
For $i = 1 To $aDriveU
        If $aDriveU[$i] <> 'a:' Then
                $Num = _CM_Get_Drive_Disk_Number($aDriveU[$i])
                MsgBox(0, $aDriveU[$i] & ' 物理盘号', '系统(0基):' & $Num & @LF & _
                                'GHOST(1基):' & $Num + 1)
        EndIf
Next

weeks1 发表于 2012-12-2 07:19:49

学习了学习了

lpxx 发表于 2012-12-2 10:24:21

回复case


    贴出来的info可能已经与实际有差,改一下试试
afan 发表于 2012-12-1 23:31 http://www.autoitx.com/images/common/back.gif

暂时没看懂,等我仔细揣摩一下。

case 发表于 2012-12-2 12:04:02

回复 8# lpxx


    谢谢关注,我也在研究研究,不懂的地方还请多多帮忙才是

case 发表于 2012-12-2 12:50:41

回复 6# afan


    A版,怎么我运行你这段代码出错,我也在autoit3\Include下放了SetupApi.au3和LocalSecurityAuthority.au3,甚至还放了SetupUI.au3,还有下载了P版的lsasecur.au3也放在Include下,运行都要出错,也尝试把lsasecur.au3改名LocalSecurityAuthority.au3运行,也要报错。
会不会是版本问题或是我还要差些文件?

afan 发表于 2012-12-2 13:02:51

回复 10# case


    你的第一个报错提示怎么是 SetupApi.au3 的第二行? 这行不可能是“Return SetError...”

lzv0626 发表于 2012-12-2 13:08:50

暂时没看懂

xms77 发表于 2012-12-2 21:10:35

回复 4# afan
A版的表达式考虑的太全面了,有些要好好研究,如果我来写的话是这样的(?m)(\d\.1):.*\[(\w:)\\\].*Removable Drive

chentuyu1203 发表于 2012-12-6 15:37:38

进来学习一下

sd23 发表于 2012-12-8 09:24:12

进来学习一下$$
页: [1]
查看完整版本: 一批处理转AU3代码