[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[悬赏20元]如何获取系统所在磁盘和分区编号并做一系列处理

因为想省一些力气,希望用bat把有些步骤操作下,希望各路大神帮帮忙,不胜感激
我没有什么积分,就支付宝付款20元作为一点心意吧


这是从diskpart获取的磁盘和分区信息diskpart.txt
  1. Microsoft DiskPart 版本 10.0.10586
  2. Copyright (C) 1999-2013 Microsoft Corporation.
  3. 在计算机上:
  4.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  5.   --------  -------------  -------  -------  ---  ---
  6.   磁盘 0    联机              119 GB      0 B        *
  7.   磁盘 1    联机              931 GB  6144 KB         
  8. 磁盘 0 现在是所选磁盘。
  9.   分区 ###       类型              大小     偏移量
  10.   -------------  ----------------  -------  -------
  11.   分区      1    系统                 300 MB  1024 KB
  12.   分区      2    保留                 128 MB   301 MB
  13.   分区      3    主要                  75 GB   429 MB
  14.   分区      4    主要                  42 GB    75 GB
  15.   分区      5    恢复                 800 MB   118 GB
  16.   分区      6    OEM                201 MB   119 GB
  17. 磁盘 1 现在是所选磁盘。
  18.   分区 ###       类型              大小     偏移量
  19.   -------------  ----------------  -------  -------
  20.   分区      1    主要                  31 GB    20 KB
  21.   分区      0    扩展的                886 GB    31 GB
  22.   分区      3    逻辑                 886 GB    31 GB
  23.   分区      2    主要                  13 GB   917 GB
  24.             
复制代码
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正在进行

回复 5# GNU

希望老师根据我的新回复修改下代码
这是新的diskpart.txt

TOP

本帖最后由 电动小马达 于 2016-8-22 21:33 编辑

回复 3# GNU
是这样的
如果我的diskpart.txt文件是这样
  1. Microsoft DiskPart 版本 10.0.10586
  2. Copyright (C) 1999-2013 Microsoft Corporation.
  3. 在计算机上:
  4.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  5.   --------  -------------  -------  -------  ---  ---
  6.   磁盘 0    联机              119 GB      0 B        *
  7.   磁盘 1    联机              931 GB  6144 KB         
  8. 磁盘 0 现在是所选磁盘。
  9.   分区 ###       类型              大小     偏移量
  10.   -------------  ----------------  -------  -------
  11.   分区      1    系统保留                  1 GB    20 KB
  12.   分区      2    主要                  31 GB    20 KB
  13.   分区      4    扩展的                886 GB    31 GB
  14.   分区      5    逻辑                  86 GB    31 GB
  15.   分区      6    逻辑                  86 GB    31 GB
  16.   分区      7    逻辑                  86 GB    31 GB
  17.   分区      8    逻辑                  86 GB    31 GB
  18.   分区      3    主要                  31 GB   917 GB
  19. 磁盘 1 现在是所选磁盘。
  20.   分区 ###       类型              大小     偏移量
  21.   -------------  ----------------  -------  -------
  22.   分区      1    主要                  31 GB    20 KB
  23.   分区      0    扩展的                886 GB    31 GB
  24.   分区      3    逻辑                 886 GB    31 GB
  25.   分区      2    主要                  13 GB   917 GB
  26.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  27.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  28.   卷     0     C   Win10 SSD    NTFS   磁盘分区          31 GB  正常         启动      
  29.   卷     1     E   Test SSD     NTFS   磁盘分区          42 GB  正常                 
  30.   卷     2                      FAT32  磁盘分区         300 MB  正常         系统      
  31.   卷     3         LENOVO_PART  NTFS   磁盘分区         800 MB  正常         已隐藏     
  32.   卷     4                      NTFS   磁盘分区          86 GB  正常                 
  33.   卷     5     D   Files HDD    NTFS   磁盘分区         886 GB  正常                 
  34.   卷     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,逻辑

TOP

回复 2# happy886rr


    把你的代码发出来给大家学习一下吧

TOP

本帖最后由 电动小马达 于 2016-8-22 21:11 编辑

回复 3# GNU
谢谢朋友完成的第一步骤的操作,可能我有些地方说的不对,代码需要稍微修改下

TOP

step1_1.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-9 delims=: " %%a in ('type "diskpart.txt" ^| findstr /n ".*"') do (
  4.     if "%%d" equ "联机" (
  5.         if "%%i" equ "*" (
  6.             set "_%%b %%c=GPT"
  7.         ) else (
  8.             set "_%%b %%c=MBR"
  9.         )
  10.     )
  11.     if "%%b" equ "磁盘" (
  12.         set "DiskNum=%%c"
  13.         set MaxMB=0
  14.         set MaxGB=0
  15.         set DiskLine=%%a
  16.     )
  17.     if "%%d" equ "系统" (
  18.         set "StrDisk=磁盘 !DiskNum!"
  19.         call set strPT=%%_!StrDisk!%%
  20.         call :MaxPartition !DiskLine!
  21.         if !MaxGB! neq 0 (
  22.             set "strPartition=分区!PartitionNumG!"
  23.         ) else if !MaxMB! neq 0 (
  24.             set "strPartition=分区!PartitionNumM!"
  25.         )
  26.         goto :EndStep1_1
  27.     )
  28. )
  29. goto :eof
  30. :MaxPartition
  31. for /f "skip=%1 tokens=1-8" %%a in ('type "diskpart.txt"') do (
  32.     if "%%a" neq "磁盘" (
  33.         if "%%e" equ "MB" (
  34.             if %%d gtr !MaxMB! (
  35.                 set MaxMB=%%d
  36.                 set PartitionNumM=%%b
  37.             )
  38.         ) else if "%%e" equ "GB" (
  39.             if %%d gtr !MaxGB! (
  40.                 set MaxGB=%%d
  41.                 set PartitionNumG=%%b
  42.             )
  43.         )
  44.     ) else (
  45.         goto :eof
  46.     )
  47. )
  48. goto :eof
  49. :EndStep1_1
  50. set StrResult1_1=!StrDisk: =!!strPartition!,!strPT!,最大!strPartition!
  51. >"0.txt" echo !StrResult1_1!
复制代码

TOP

自己写,没啥难度的。

TOP

返回列表