872777825 发表于 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, '(:)\t(\d:\d+)\h*\tA\t', 3) ;正则匹配活动分区,[从C到Z]、\t匹配一个制表符、\d、匹配一个数字字符、:???
If Not @error Then MsgBox(0, 0, '活动分区 ' & $sR & '='&$sR)
$sR = StringRegExp($str, '(:)\t(\d:\d+)', 3) ;正则匹配所有分区及位置
If Not @error Then MsgBox(0, 0, '最后分区 ' & $sR & '=' & $sR)
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, '(:)\t(\d:\d+)\h*\tA\t', 3)
$sR = StringRegExp($str, '(:)\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改成一个需要判断的分区变量   即可判断是第几硬盘第几分区   强大

user3000 发表于 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

afan 发表于 2012-4-30 19:25:21

http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=15544&pid=168994&fromuid=7644923

872777825 发表于 2012-4-30 19:42:39

回复872777825

没有相应EXE作测试, 看着你的代码猜的
user3000 发表于 2012-4-30 19:25 http://www.autoitx.com/images/common/back.gif


    USER3000 老师这个法子好像可以解决我的问题了谢谢

872777825 发表于 2012-4-30 19:44:22


afan 发表于 2012-4-30 19:25 http://www.autoitx.com/images/common/back.gif


    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)这个好像判断有点错乱我这里有两个硬盘还有一个虚拟盘   判出来的结果 好像虚拟盘的位置是对的其他的都是错的   

谢谢版主的回帖

user3000 发表于 2012-4-30 19:50:22

回复 4# 872777825

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

过有, 帖子问题解决了,要编辑帖子标题,自己加上(已解决)字样!

872777825 发表于 2012-4-30 19:51:33

回复 6# user3000


    好    那叫大哥嘿嘿   我小孩都看打酱油了不是小孩了 {:face (197):}

afan 发表于 2012-4-30 20:20:58

afan老师发的这个P版这个好像判断有点错乱我这里有两个硬盘还有一个虚拟盘   判出来的结果 好 ...
872777825 发表于 2012-4-30 19:44 http://www.autoitx.com/images/common/back.gif


    老师实不敢当,只是有类似的印象而已~
不知道你所指的“判断有点错乱”是指什么,我这里测试是Ok的。(注意:$iDisk 的值是0基的)
页: [1]
查看完整版本: 如何获取硬盘某个分区是第几分区【已解决】