找回密码
 加入
搜索
查看: 5003|回复: 7

[AU3基础] 如何获取硬盘某个分区是第几分区【已解决】

  [复制链接]
发表于 2012-4-30 19:13:02 | 显示全部楼层 |阅读模式
本帖最后由 872777825 于 2012-4-30 19:50 编辑
FileInstall('dsptw.exe', @TempDir & '\') ;将dsptw.exe文件打包进编译
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR >d:\diskinfo.txt', @TempDir, 0) ;于dos下隐藏运行dsptw生成信息文本
$str = FileRead("d:\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] & '='&$sR[UBound($sR) - 1])
$sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)', 3) ;正则匹配所有分区及位置
If Not @error Then MsgBox(0, 0, '最后分区 ' & $sR[UBound($sR) - 2] & '=' & $sR[UBound($sR) - 1])
FileDelete(@TempDir & '\dsptw.exe') ;删除临时文件
FileDelete(@TempDir & '\diskinfo.txt') ;删除临时文件
论坛中找到以上代码   可以得出系统分区是硬盘的第几分区 如1:1   最后分区是第几分区 如1:4

如果想知道 D 盘是第几分区 1:?   改如何改写呢

希望各位老师指点下  谢谢


谢谢下面两位老师的帮忙指点  问题得到了解答
FileInstall('dsptw.exe', @TempDir & '\')
RunWait(@ComSpec & ' /c ' & @TempDir & '\dsptw.exe /A /PDR >d:\diskinfo.txt', @TempDir, 0)
$str = FileRead("d:\diskinfo.txt")
$sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)\h*\tA\t', 3)
$sR = StringRegExp($str, '([C-Z]:)\t(\d:\d+)', 3)
If IsArray($sR) Then
   for $i = 0 to UBound($sR)-2 Step 2
           If StringInStr($sR[$i], 'f') Then MsgBox(0, '找到 D 盘分区信息', $sR[$i+1])
   Next
EndIf
只需把第8行的F改成一个需要判断的分区变量   即可判断是第几硬盘第几分区   强大

评分

参与人数 1金钱 +15 收起 理由
user3000 + 15 自动改标题为已解决

查看全部评分

发表于 2012-4-30 19:25:09 | 显示全部楼层
回复 1# 872777825

没有相应EXE作测试, 看着你的代码猜的
If IsArray($sR) Then
   for $i = 0 to UBound($sR)-2 Step 2
           If StringInStr($sR[$i], 'd') Then MsgBox(0, '找到 D 盘分区信息', $sR[$i+1])
   Next
EndIf
发表于 2012-4-30 19:25:21 | 显示全部楼层
 楼主| 发表于 2012-4-30 19:42:39 | 显示全部楼层
回复  872777825

没有相应EXE作测试, 看着你的代码猜的
user3000 发表于 2012-4-30 19:25



    USER3000 老师这个法子好像可以解决我的问题了  谢谢
 楼主| 发表于 2012-4-30 19:44:22 | 显示全部楼层
afan 发表于 2012-4-30 19:25



    afan老师发的这个P版
#include <SetupAPI.au3>

Const $tagDISK_NUMBER = "ulong DeviceType;ulong DeviceNumber;ulong PartitionNumber"

Local $tBuffer, $hDrive, $iDisk, $iPartition, $sDrive = "F:"

$tBuffer = DllStructCreate($tagDISK_NUMBER)
$hDrive = _CM_Create_File("\\." & $sDrive, $GENERIC_READ, 3, 0, 3, 0)
_CM_Device_IO_Control($hDrive, 0x2D1080, 0, 0, $tBuffer, 12)
$iDisk = DllStructGetData($tBuffer, "DeviceNumber") ; 0-based
$iPartition = DllStructGetData($tBuffer, "PartitionNumber") ; 1-based
_CM_Assign_Var($tBuffer, 0, _CM_Close_Handle($hDrive))

Msgbox(0, $sDrive, $iDisk & " -> " & $iPartition)
这个好像判断有点错乱  我这里有两个硬盘  还有一个虚拟盘   判出来的结果 好像虚拟盘的位置是对的  其他的都是错的   

谢谢版主的回帖
发表于 2012-4-30 19:50:22 | 显示全部楼层
回复 4# 872777825

说话真客气, 不会还是个孩子吧?
不要叫我老师, 我水平不到家可当不了谁谁的老师!
真客气叫声大哥或老兄就好!

过有, 帖子问题解决了,要编辑帖子标题,自己加上(已解决)字样!
 楼主| 发表于 2012-4-30 19:51:33 | 显示全部楼层
回复 6# user3000


    好    那叫大哥  嘿嘿   我小孩都看打酱油了  不是小孩了
发表于 2012-4-30 20:20:58 | 显示全部楼层
afan老师发的这个P版这个好像判断有点错乱  我这里有两个硬盘  还有一个虚拟盘   判出来的结果 好 ...
872777825 发表于 2012-4-30 19:44



    老师实不敢当,只是有类似的印象而已~
不知道你所指的“判断有点错乱”是指什么,我这里测试是Ok的。(注意:$iDisk 的值是0基的)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 10:37 , Processed in 0.082550 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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