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

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

 火.. [复制链接]
 楼主| 发表于 2010-5-13 10:13:16 | 显示全部楼层
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])
local $CP = $sR[0]
local $HAO = $sR[UBound($sR) - 1]
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $CP="'&$CP&'"',"", @SW_HIDE)
RunWait(@ComSpec & ' /c ' & @TempDir & '\PECMD.EXE ENVI $HAO="'&$HAO&'"',"", @SW_HIDE)
If Not @error Then MsgBox(0, 0, '活动分区 ' & $CP & ' No. ' & $HAO)

本帖子中包含更多资源

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

×
 楼主| 发表于 2010-5-13 10:14:56 | 显示全部楼层
回复  sunkiss


    成功了就OK了~
\d:就是一个数字后面跟个":"而已;\h代表水平空格;\tA代表Tab空 ...
afan 发表于 2010-5-13 09:08



哦,呵呵,好,一会我再啃啃帮助这块骨头,哈哈
发表于 2010-5-13 10:22:12 | 显示全部楼层
本帖最后由 republican 于 2010-5-13 10:28 编辑

回复 7# afan
请问不用Ghost模式(/A /PDR),正则如何写?
 楼主| 发表于 2010-5-13 10:31:30 | 显示全部楼层
变量外面不要用"","$sR[0]" 不对,应该为 $sR[0]
afan 发表于 2010-5-13 10:11



哈哈,行了,还是版版厉害!为什么不能用“”呢?《FAQ 大全》初学者必看.txt这里面的就加着""变量里用这个不行吗?
 楼主| 发表于 2010-5-13 10:34:02 | 显示全部楼层
回复  afan
请问不用Ghost模式(/A /PDR),正则如何写?
republican 发表于 2010-5-13 10:22



不加这两个参数生成的文件是这样的啊!
Syntax:
   DSPTW [Disk] [Start] [Sectors] [/S|/R|/C] [FileName] [/Y]
      Disk: 0-First Hard Disk, 1-Second Hard Disk, ...
            A:, B:, C:, ...
            d:n   e.g. 0:1, 0:2, 0:3 ...
      Start: Disk Absolute Sector Number
      Sectors: Total Sectors to be Processed
      /S:  Save Disk Sector Info to File
      /R:  Restore Disk Sector Info from File
      /C:  Compare Disk Sector Info with File
      FileName: Disk Sector Info File
      /Y: Assume Yes on all Queries & not Display Copyright

   DSPTW [Disk] [Start] [Sectors] [/L] [/P] [/A]
      /L:  List Disk Sector Info on Screen
      /P:  Pause echo Screen
      /A:  Show ASC Value

   DSPTW [Disk] [Start] [Sectors] [/E] [/Y]
      /E: Erase Disk Sector Info

   DSPTW [Disk] [Start] [Sectors] [/D]|[/O] [DstDisk] [Offset] [/Y]
      /D: Duplicate Disk Sector Info from Disk to DstDisk.
      /O: Compare Disk Sector Info with DstDisk
      DstDisk: 0-First Hard Disk, 1-Second Hard Disk, ...
               A:, B:, C:, D: ...
      Offset: Disk Absolute Sector Number

   DSPTW [Disk] [SectorNo] [Offset] [/M] [/HEX:value] [/Y]
      SectorNo: Disk Absolute Sector Number.
      Offset: The Offset in Specified Sector (0..511).
      /M: Modify Disk Sector Info.
      /HEX: Hex Style.
      value: Hex Digital String (No more than 32 characters).

   DSPTW [Disk] [/S|/R|/C] [FileName] [/Y]
      Disk: 0-First Hard disk, 1-Second Hard Disk, ...
      /S: Save Disk Partition Info to File.
      /R: Restore Disk Partiton Info from File.
      /C: Compare Disk Partiton Info with File.
      FileName: Disk Partition Info File.

   DSPTW [Disk] [/S] [FileName] [/DBR]  [/Y]
      Save Partition Boot Record to File.

   DSPTW [Disk] [/L] [/A] [/EXT]  [/Y]
      /L: List Disk Partition Info on Screen.
      /A: Get Accurate TotalSectors of Disk.
      /Ext: Display Big Extend Partition.

   DSPTW [Disk] [/ACT:n]
      Active Disk Partition n.

   DSPTW [Disk] [/FIND:type] [/GhostStyle] [/Y]
      /FIND: Find Disk Partition.
      type: Can be FAT16/FAT32/FAT/NTFS/LINUX/DELL/HIDE/NORMAL/ALL.
      /GhostStyle: Display in Ghost Style, and Disk Start From 1.

   DSPTW [Disk] [/MBR] [/NOBACK] [/File:filename] [/Y]
      /MBR: ReBuild Disk Main Boot Record.
      /NOBACK: Don't Backup old MBR.
      /File: Restore MBR from filename

   DSPTW [Disk] [/HIDE|/UNHIDE:n]  [/Y]
      Hide/Unhide Disk Partition n.

   DSPTW [Disk] [/DPS|/DPR|/DPC] [/Y]
      /DPS: Save Disk Partition Info to Last Cluster.
      /DPR: Restore Disk Partiton Info from Last Cluster.
      /DPC: Compare Disk Partiton Info with Last Cluster.

   DSPTW [Disk] [/ChangeType:type:partno] [/Y]
      /ChangeType: Change Partition Type.
      type: 01-FF.
      partno: Partition Number.

   DSPTW [Drive]|[/A] [/PDR] [/REVERSE] [/Y]
      /PDR: Display Relationship of Partition & Drive(Ghost Style).
      Drive: C:, D:, E ...
      /A: Process All Drive.
      /REVERSE: Display with a Reverse Order(Only when Switch "/A" is used).

Type "DSPTW /?" for Help.
发表于 2010-5-13 10:35:20 | 显示全部楼层
回复  afan
请问不用Ghost模式(/A /PDR),正则如何写?
republican 发表于 2010-5-13 10:22



    不明白,要正则什么?
 楼主| 发表于 2010-5-13 10:37:11 | 显示全部楼层
看来这个正则真的好难啊!
 楼主| 发表于 2010-5-13 13:52:00 | 显示全部楼层
可累死我了,休息一下!AU3的函数真多啊,是巨多!
发表于 2010-5-13 15:46:38 | 显示全部楼层
回复 21# afan

ghost模式下并不识别Linux结构的分区,所以如果想获取所有磁盘信息的话,该如何?
发表于 2010-5-13 16:27:04 | 显示全部楼层
回复 24# republican


    可以试试

dsptw 0 /l
dsptw 1 /l
dsptw 2 /l
...

dsptw 0 /find:all
dsptw 1 /find:all
dsptw 2 /find:all
...
 楼主| 发表于 2010-5-13 17:53:00 | 显示全部楼层
回复 25# afan


在我的电脑上这两个都不对!
No.  Dr Tag FileSystem     Volume      Act StartPos   Sectors    MBytes FreeMB
0:1  C: Pri HPFS/NTFS                  Yes 63         100374057  49010  32716
0:2  F: Log Win95_FAT32                    100374183  2040192    996    201
0:3  D: Log HPFS/NTFS                      102414438  204812622  100006 10550
0:4  E: Log HPFS/NTFS                      307227123  215511912  105230 31560
0:5  G: Pri Linux_Native   超强电脑        522739035  100293795  48971  
0:6     Pri Linux_Swap                     623032830  2104515    1027 
G:是我量产的usb-CDROM,06是我的U盘剩余空间做的可移动磁盘,我的移动硬盘没有认到
发表于 2010-5-13 17:58:12 | 显示全部楼层
非ghost模式第一硬盘都是识别为0,第二硬盘为1...
试试 dsptw 1 /l 或 dsptw 1 /find:all
发表于 2010-5-13 19:42:57 | 显示全部楼层
本帖最后由 republican 于 2010-5-13 19:44 编辑

回复 25# afan


其实我的意思是该如何提取数据才能生成上表的结果。
上表生成代码:
Local $diskinfo=FileOpen($IniFile) ;dsptw Ghost模式生成的文件
Local $TotalLine=0
While 1  ;获取行数
        FileReadLine($diskinfo,$TotalLine)
        If @error=-1 Then ExitLoop
        $TotalLine +=1
WEnd

Local $LineRead ;定义变量
For $LineRead =3 To $TotalLine -2  ;从第三行开始读取
        Local $LineForRead=FileReadLine($diskinfo,$LineRead)
        Local $InfoForRead=StringSplit($LineForRead,"        ")
        For $i = 1 To $InfoForRead[0]
                If $i = 1 Then 
                        _GUICtrlListView_AddItem($DiskList, StringStripWS($InfoForRead[$i],8), $LineRead-3)
                        _GUICtrlListView_AddSubItem($DiskList, $LineRead-3, DriveGetFileSystem(StringStripWS($InfoForRead[$i],8)), 6)
                        ;_GUICtrlListView_AddSubItem($DiskList, $LineRead-3, 'FAT32', 6)
                Else
                        If $InfoForRead[$i]="A" Then 
                                $InfoForRead[$i]="活动"
                                $ActivePar=$InfoForRead[$i-2]
                        EndIf
                                
                        _GUICtrlListView_AddSubItem($DiskList, $LineRead-3, StringStripWS($InfoForRead[$i],8), $i-1)
                EndIf
                
        Next
        
Next
因为Ghost模式可以用制表符隔开,但find:all模式却不可以。

本帖子中包含更多资源

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

×
 楼主| 发表于 2010-5-13 20:11:32 | 显示全部楼层
又发现问题了!
现在分区表是这样的情况怎么办?
Drive   No.     Active  VolumeLabe      Total (Mb)     Free (Mb)
C:        1:1         A                                12793          4886   
D:        1:2                  学习                    20494          7342   
E:        1:3                  娱乐                    20494          8209   
F:        1:4                  下载备份                21059          1957   
I:        2:1         A        超强电脑                7420           1332   
I:        2:1         A        超强电脑  这个是我量产的U盘再用下边的语句会提示c:和2:1
If Not @error Then MsgBox(0, 0, '活动分区 ' & $sR[0] & ' No. ' & $sR[UBound($sR) - 1])
怎么让提示现示c:和1:1呢?
 楼主| 发表于 2010-5-13 20:25:16 | 显示全部楼层
能不能这样?
正则后$sR[0]显示c:,$sR[UBound($sR) - 1]那个变量才是对应这一行1:1的呢?
C:        1:1         A                                12793          4886
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-13 00:17 , Processed in 0.072959 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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