找回密码
 加入
搜索
楼主: 令狐大虾

[AU3基础] [已解决]可否判断C盘是活动分区并执行程序?感谢austere 帮助

  [复制链接]
发表于 2017-1-6 22:55:46 | 显示全部楼层
回复 15# chishingchan


    虫子的这个代码我看过,非常不错~ 不过和你这个不太一样,厉害~
 楼主| 发表于 2017-1-7 01:30:06 | 显示全部楼层
回复  令狐大虾
austere 发表于 2017-1-6 22:10


此代码不行。
单独GPT磁盘启动,MBR或UEFI 8PE下运行此程序都显示为“当前为MBR启动”
 楼主| 发表于 2017-1-7 01:31:27 | 显示全部楼层
看看这个合适:
chishingchan 发表于 2017-1-6 22:23


你这个等于是看磁盘索引之类。根本不是我需要的效果哈
 楼主| 发表于 2017-1-7 01:35:27 | 显示全部楼层
回复  austere


    给你参考虫子樱桃的代码:
chishingchan 发表于 2017-1-6 22:30


这个早看过了
获取当前系统的启动模式而已。也达不到要求。因为我是MBR模式磁盘的UEFI启动!
发表于 2017-1-7 09:13:46 | 显示全部楼层
回复 18# 令狐大虾


    改下判断你再试下~
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <Process.au3>

If FileExists(@TempDir & "\disk") = 0 Then _FileCreate(@TempDir & "\disk")
$file = _FileCreate(@TempDir & "\disk\list.txt")
        $file1 = FileOpen($file, 1)
        FileWrite(@TempDir & "\disk\list.txt", "list vol")

        _RunDos("cmd.exe /c diskpart.exe /s " & @TempDir & "\disk\list.txt >"& @TempDir & "\disk\123.txt")
        Local $aArray = FileReadToArray(@TempDir & "\disk\123.txt")
        Local $asd = _ArrayFindAll($aArray, "  C  ", Default, Default, 1, 1, 2)
                $ss = StringStripWS($aArray[$asd[0]], 8)
        Local $sss = StringRight($ss, 2)
        If $sss == "系统" OR $sss == "system" Then
                MsgBox(0,"","当前为MBR启动")
        Else
                msgbox(0,"","当前为UEFI启动")
        EndIf
        
这个只是调换了一下判断而已,你再试下
 楼主| 发表于 2017-1-7 11:25:25 | 显示全部楼层
回复 20# austere

多硬盘,UEFI 启动的MBR硬盘+GPT硬盘混合。误判为“当前为UEFI启动”。意思就是误判为GPT启动。

其实这两行字可以改为:“当前为MBR硬盘启动“,”当前为GPT硬盘启动”。因为GPT模式只能是UEFI启动
发表于 2017-1-7 12:50:50 | 显示全部楼层
回复 21# 令狐大虾


    这个只是判断一下C盘的启动模式,你就是挂载再多的硬盘,也只是判断C盘的~ 也就是说我系统安装到C盘或者恢复到C盘后,如果判断为MBR启动,那么你就执行你原有的那个boot命令到C就好了,如果判断为GPT模式,boot命令到另外划分的启动分区就好了。你要实现的不是这个目的?
 楼主| 发表于 2017-1-7 16:00:59 | 显示全部楼层
本帖最后由 令狐大虾 于 2017-1-7 16:07 编辑
回复  令狐大虾


    这个只是判断一下C盘的启动模式,你就是挂载再多的硬盘,也只是判断C盘的~ 也就是 ...
austere 发表于 2017-1-7 12:50


理是这个理,但是却不一样的。
这么说吧:
1.前提必须是UEFI PE启动
2.UEFI PE下检测系统所在的C盘为MBR模式的磁盘。

而这个代码在UEFI PE下检测只是给我一个UEFI启动?那么我根本就不知道这个启动的磁盘是不是MBR模式磁盘。所以此代码仅仅是适合单个磁盘作为检测,并且它仅仅是MBR PE下执行也会给我返回是UEFI启动。。。。。。。。

大致明白了这个代码的原理就是检测磁盘主分区,超过一个主分区就判断为UEFI启动
发表于 2017-1-7 17:24:15 | 显示全部楼层
回复 23# 令狐大虾


    实际测试了一把,果真如你所说~  我是在win10下测试的,换了win8的PE进行测试,可能是因为diskpart版本问题,信息获取不到,所以会显示判断错误,晚上我再改下代码给你,你再试下~
发表于 2017-1-7 18:13:08 | 显示全部楼层
重新修改了一下,我进PE下测试了可以,你再试下~
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <Process.au3>

If FileExists(@TempDir & "\disk") = 0 Then _FileCreate(@TempDir & "\disk")
$file = _FileCreate(@TempDir & "\disk\list.txt")
        $file1 = FileOpen($file, 1)
        FileWrite(@TempDir & "\disk\list.txt", "list disk")
                

        _RunDos("cmd.exe /c diskpart.exe /s " & @TempDir & "\disk\list.txt >"& @TempDir & "\disk\123.txt")
        Local $aArray = FileReadToArray(@TempDir & "\disk\123.txt")
        Local $asd = _ArrayFindAll($aArray, "磁盘 0", Default, Default, 1, 1, 2)
                $ss = StringStripWS($aArray[$asd[0]], 8)
                Local $sss = StringRight($ss, 1)
        If $sss == "*"  Then
                msgbox(0,"","当前为UEFI启动")
        Else
                MsgBox(0,"","当前为MBR启动")
        EndIf
 楼主| 发表于 2017-1-7 23:15:02 | 显示全部楼层
回复 25# austere

搞掂了,这代码正确识别达到我需要的效果,我修改了一下文字还有添加两行命令进去。不过怎样在帖子里面如你这样好像一个图一样发出来并且下面又复制代码几个字?
发表于 2017-1-8 00:13:04 | 显示全部楼层
回复 26# 令狐大虾



如图,点击插入代码,然后把代码复制到里面就可以了~  或者直接使用高级里面的代码插入

本帖子中包含更多资源

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

×
 楼主| 发表于 2017-1-8 14:59:52 | 显示全部楼层
回复 27# austere
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <Process.au3>

If FileExists(@TempDir & '\disk\') = 0 Then _FileCreate(@TempDir & '\disk\')
$file = _FileCreate(@TempDir & '\disk\list.txt')
        $file1 = FileOpen($file, 1)
        FileWrite(@TempDir & '\disk\list.txt', 'list disk')
                

        _RunDos('cmd.exe /c diskpart.exe /s ' & @TempDir & '\disk\list.txt >'& @TempDir & '\disk\123.txt')
        Local $aArray = FileReadToArray(@TempDir & "\disk\123.txt")
        Local $asd = _ArrayFindAll($aArray, '磁盘 0', Default, Default, 1, 1, 2)
                $ss = StringStripWS($aArray[$asd[0]], 8)
                Local $sss = StringRight($ss, 1)
        If $sss == '*'  Then
                msgbox(0,'','当前为GPT硬盘启动',1)
                _RunDos('cmd.exe /c bcdboot c:\windows /l zh-cn') ;确定C盘是GPT磁盘并将EFI启动文件夹写入活动区ESP盘       
                Else
                MsgBox(0,'','当前为MBR硬盘启动',1)
                _RunDos('cmd.exe /c bcdboot c:\windows /l zh-cn /s c:') ;确定C盘是MBR磁盘并将EFI启动文件夹写入活动区C盘,若MBR PE启动则将Boot启动文件夹写入活动区C盘
                                 If FileExists(@HomeDrive & '\EFI') Then
                                 FileSetAttrib('C:\EFI','+RSH')
                 EndIf
                EndIf
发表于 2017-1-8 22:44:28 | 显示全部楼层
回复 28# 令狐大虾


    你那个gpt模式用那个命令管用? 我看你没写esp分区盘符啊
 楼主| 发表于 2017-1-8 23:14:22 | 显示全部楼层
本帖最后由 令狐大虾 于 2017-1-8 23:16 编辑
回复  令狐大虾


    你那个gpt模式用那个命令管用? 我看你没写esp分区盘符啊
austere 发表于 2017-1-8 22:44

管用啊,实体机测试通过。你没看我改了文字啊。我需要的是判断是啥模式的磁盘就直接把引导文件写入C盘,不需要写ESP盘符的
不过在03PE下运行出现diskpart错误,03PE里面也有diskpart.exe的,就是替换8PE的进去也不行
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 15:32 , Processed in 0.074362 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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