标题: [悬赏20元]如何获取系统所在磁盘和分区编号并做一系列处理 [打印本页]
作者: 电动小马达 时间: 2016-8-20 14:29 标题: [悬赏20元]如何获取系统所在磁盘和分区编号并做一系列处理
因为想省一些力气,希望用bat把有些步骤操作下,希望各路大神帮帮忙,不胜感激
我没有什么积分,就支付宝付款20元作为一点心意吧
这是从diskpart获取的磁盘和分区信息diskpart.txt- Microsoft DiskPart 版本 10.0.10586
-
- Copyright (C) 1999-2013 Microsoft Corporation.
- 在计算机上:
-
- 磁盘 ### 状态 大小 可用 Dyn Gpt
- -------- ------------- ------- ------- --- ---
- 磁盘 0 联机 119 GB 0 B *
- 磁盘 1 联机 931 GB 6144 KB
-
- 磁盘 0 现在是所选磁盘。
-
- 分区 ### 类型 大小 偏移量
- ------------- ---------------- ------- -------
- 分区 1 系统 300 MB 1024 KB
- 分区 2 保留 128 MB 301 MB
- 分区 3 主要 75 GB 429 MB
- 分区 4 主要 42 GB 75 GB
- 分区 5 恢复 800 MB 118 GB
- 分区 6 OEM 201 MB 119 GB
-
- 磁盘 1 现在是所选磁盘。
-
- 分区 ### 类型 大小 偏移量
- ------------- ---------------- ------- -------
- 分区 1 主要 31 GB 20 KB
- 分区 0 扩展的 886 GB 31 GB
- 分区 3 逻辑 886 GB 31 GB
- 分区 2 主要 13 GB 917 GB
-
复制代码
step1.bat需要执行的步骤如下
1.获取系统所在的磁盘和分区编号,并判断该磁盘的分区表是MBR还是GPT以及该磁盘最大的分区,比如" 磁盘0分区3,GPT,最大分区3",将这个结果保存在0.txt
2.将步骤1得到的结果替换到auto.xml,以磁盘0分区3为例,用磁盘编号(即0)替换xml文件中的10086,用分区编号(即3)替换文件中的10087
3.1如果分区表是GPT,则压缩该磁盘最大的分区创建一个10000MB的主分区,卷标Windows_Install,盘符为A
3.2如果分区表位MBR,则压缩该磁盘最大的分区创建一个10000MB的逻辑分区,卷标Windows_Install,盘符为A
4.将1.iso文件释放到A盘 (这一步我用的是7z x 1.iso a:\ )
5.1如果分区表是GPT,则本轮无操作
5.2如果分区表是MBR,则删除A盘的efi文件夹
6.打开A盘的hdd.exe
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
执行完刚才的6步之后,电脑会重启,然后继续进行step2
step2.bat需要执行的步骤如下
1.格式化那个10000MB的分区,并把它合并到之前将它分出来的那个分区
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
step1.bat画面显示的内容
每一个步骤执行的时候画面都会显示步骤*正在进行(可以用pause)
比如进行步骤3的时候画面会显示
步骤1已经完成
步骤2已经完成
步骤3正在进行
作者: happy886rr 时间: 2016-8-21 21:08
自己写,没啥难度的。
作者: GNU 时间: 2016-8-22 14:51
step1_1.bat- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1-9 delims=: " %%a in ('type "diskpart.txt" ^| findstr /n ".*"') do (
- if "%%d" equ "联机" (
- if "%%i" equ "*" (
- set "_%%b %%c=GPT"
- ) else (
- set "_%%b %%c=MBR"
- )
- )
- if "%%b" equ "磁盘" (
- set "DiskNum=%%c"
- set MaxMB=0
- set MaxGB=0
- set DiskLine=%%a
- )
- if "%%d" equ "系统" (
- set "StrDisk=磁盘 !DiskNum!"
- call set strPT=%%_!StrDisk!%%
- call :MaxPartition !DiskLine!
- if !MaxGB! neq 0 (
- set "strPartition=分区!PartitionNumG!"
- ) else if !MaxMB! neq 0 (
- set "strPartition=分区!PartitionNumM!"
- )
- goto :EndStep1_1
- )
-
- )
- goto :eof
-
- :MaxPartition
- for /f "skip=%1 tokens=1-8" %%a in ('type "diskpart.txt"') do (
- if "%%a" neq "磁盘" (
- if "%%e" equ "MB" (
- if %%d gtr !MaxMB! (
- set MaxMB=%%d
- set PartitionNumM=%%b
- )
- ) else if "%%e" equ "GB" (
- if %%d gtr !MaxGB! (
- set MaxGB=%%d
- set PartitionNumG=%%b
- )
- )
- ) else (
- goto :eof
- )
- )
- goto :eof
-
- :EndStep1_1
- set StrResult1_1=!StrDisk: =!!strPartition!,!strPT!,最大!strPartition!
- >"0.txt" echo !StrResult1_1!
复制代码
作者: 电动小马达 时间: 2016-8-22 19:40
本帖最后由 电动小马达 于 2016-8-22 21:11 编辑
回复 3# GNU
谢谢朋友完成的第一步骤的操作,可能我有些地方说的不对,代码需要稍微修改下
作者: GNU 时间: 2016-8-22 21:28
回复 2# happy886rr
把你的代码发出来给大家学习一下吧
作者: 电动小马达 时间: 2016-8-22 21:30
本帖最后由 电动小马达 于 2016-8-22 21:33 编辑
回复 3# GNU
是这样的
如果我的diskpart.txt文件是这样- Microsoft DiskPart 版本 10.0.10586
-
- Copyright (C) 1999-2013 Microsoft Corporation.
- 在计算机上:
-
- 磁盘 ### 状态 大小 可用 Dyn Gpt
- -------- ------------- ------- ------- --- ---
- 磁盘 0 联机 119 GB 0 B *
- 磁盘 1 联机 931 GB 6144 KB
-
- 磁盘 0 现在是所选磁盘。
-
- 分区 ### 类型 大小 偏移量
- ------------- ---------------- ------- -------
- 分区 1 系统保留 1 GB 20 KB
- 分区 2 主要 31 GB 20 KB
- 分区 4 扩展的 886 GB 31 GB
- 分区 5 逻辑 86 GB 31 GB
- 分区 6 逻辑 86 GB 31 GB
- 分区 7 逻辑 86 GB 31 GB
- 分区 8 逻辑 86 GB 31 GB
- 分区 3 主要 31 GB 917 GB
-
- 磁盘 1 现在是所选磁盘。
-
- 分区 ### 类型 大小 偏移量
- ------------- ---------------- ------- -------
- 分区 1 主要 31 GB 20 KB
- 分区 0 扩展的 886 GB 31 GB
- 分区 3 逻辑 886 GB 31 GB
- 分区 2 主要 13 GB 917 GB
-
- 卷 ### LTR 标签 FS 类型 大小 状态 信息
- ---------- --- ----------- ----- ---------- ------- --------- --------
- 卷 0 C Win10 SSD NTFS 磁盘分区 31 GB 正常 启动
- 卷 1 E Test SSD NTFS 磁盘分区 42 GB 正常
- 卷 2 FAT32 磁盘分区 300 MB 正常 系统
- 卷 3 LENOVO_PART NTFS 磁盘分区 800 MB 正常 已隐藏
- 卷 4 NTFS 磁盘分区 86 GB 正常
- 卷 5 D Files HDD NTFS 磁盘分区 886 GB 正常
- 卷 6 F Temp HDD NTFS 磁盘分区 13 GB 正常
复制代码
我想做的事情是
如果有“扩展的”这三个字,那么删除他所在的这一行,比如上文的
分区 4 扩展的 886 GB 31 GB
根据LTR的卷标C确定系统所在的分区是31GB,这样就能确定系统是位于磁盘0
如果磁盘1也存在31GB的分区的话那么选择磁盘数小的为系统所在磁盘编号
然后通过磁盘0列出来的分区编号确定分区2为系统分区
如果磁盘0也存在其他31GB的分区的话,那么选择分区数小的为系统所在的分区编号,比如上面的分区2和3
找到系统所在的磁盘最大的分区
如果最大的分区存在多个,如上面那样(5,6,7,8),则取最小的分区编号(5),并判断分区类型,如上面的“逻辑”
最后将结果总结到1.txt中
例如
磁盘0分区2,GPT,最大分区5,逻辑
作者: 电动小马达 时间: 2016-8-22 21:32
回复 5# GNU
希望老师根据我的新回复修改下代码
这是新的diskpart.txt
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |