一批处理转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
哪位大大给个思路... 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) 回复 2# afan
A版好快,我试了一下,这代码没能正常运行.
回复 3# case
贴出来的info可能已经与实际有差,改一下试试Local $aInfo = StringRegExp($str, '(?mi)^\h+(\d+\.1):.+?\[(\w):\\.+?Removable Drive\h*(?=\v|$)', 3) 回复 4# afan
谢谢A版, 这行代码可行的,我还要好好的学习一下正则啊.每次遇到这样的问题自己都无法解决.你真的帮我的很多次了,再次谢谢. 回复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 学习了学习了 回复case
贴出来的info可能已经与实际有差,改一下试试
afan 发表于 2012-12-1 23:31 http://www.autoitx.com/images/common/back.gif
暂时没看懂,等我仔细揣摩一下。 回复 8# lpxx
谢谢关注,我也在研究研究,不懂的地方还请多多帮忙才是 回复 6# afan
A版,怎么我运行你这段代码出错,我也在autoit3\Include下放了SetupApi.au3和LocalSecurityAuthority.au3,甚至还放了SetupUI.au3,还有下载了P版的lsasecur.au3也放在Include下,运行都要出错,也尝试把lsasecur.au3改名LocalSecurityAuthority.au3运行,也要报错。
会不会是版本问题或是我还要差些文件?
回复 10# case
你的第一个报错提示怎么是 SetupApi.au3 的第二行? 这行不可能是“Return SetError...” 暂时没看懂 回复 4# afan
A版的表达式考虑的太全面了,有些要好好研究,如果我来写的话是这样的(?m)(\d\.1):.*\[(\w:)\\\].*Removable Drive 进来学习一下 进来学习一下$$
页:
[1]