无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2882|回复: 35
打印 上一主题 下一主题

[原创] 批处理系列8:MBR磁盘的显示与隐藏 (更新)

[复制链接]
跳转到指定楼层
1#
发表于 2025-5-6 22:12:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 青青草 于 2025-5-7 11:09 编辑

MBR磁盘的显示与隐藏
  1. @ECHO OFF
  2. Title MBR磁盘的显示与隐藏
  3. mode con lines=36 cols=74
  4. color 1f
  5. setlocal enabledelayedexpansion

  6.     :: 获取管理员权限
  7.     >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
  8.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
  9.     ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
  10.     CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
  11.     pushd "%CD%"&& CD /D "%~dp0"  

  12. :: 设置临时目录
  13. if not exist "%temp%\DiskPart" mkdir "%temp%\DiskPart"
  14. set "tempDir=%temp%\DiskPart"

  15. :MAIN_MENU
  16. cls
  17. echo.
  18. echo 当前磁盘列表:
  19. echo list disk > "%tempDir%\DiskPart.txt"
  20. echo exit >> "%tempDir%\DiskPart.txt"
  21. diskpart /s "%tempDir%\DiskPart.txt"

  22. :GET_DISK_NUMBER
  23. echo.
  24. set /p "choiceDisk=请输入要操作的磁盘编号:"
  25. if not defined choiceDisk goto GET_DISK_NUMBER

  26. :: 检查输入是否全为数字
  27. set "isValid=1"
  28. for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
  29. if "%isValid%"=="0" (
  30.     echo 错误:请输入有效的数字!
  31.     goto GET_DISK_NUMBER
  32. )

  33. :: 获取分区列表
  34. echo select disk %choiceDisk% > "%tempDir%\DiskPart.txt"
  35. echo list partition >> "%tempDir%\DiskPart.txt"
  36. echo exit >> "%tempDir%\DiskPart.txt"
  37. diskpart /s "%tempDir%\DiskPart.txt"

  38. :GET_PARTITION_NUMBER
  39. echo.
  40. set /p "partitionNum=请输入要操作的分区编号:"
  41. if not defined partitionNum goto GET_PARTITION_NUMBER

  42. :: 检查输入是否全为数字
  43. set "isValid=1"
  44. for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
  45. if "%isValid%"=="0" (
  46.     echo 错误:请输入有效的数字!
  47.     goto GET_PARTITION_NUMBER
  48. )

  49. :: 获取分区详细信息
  50. (
  51.     echo select disk %choiceDisk%
  52.     echo select partition %partitionNum%
  53.     echo detail partition
  54.     echo exit
  55. ) > "%tempDir%\DiskPart.txt"

  56. diskpart /s "%tempDir%\DiskPart.txt" > "%tempDir%\PartInfo.txt"

  57. :: 提取分区类型ID
  58. set "id="
  59. for /f "tokens=2 delims=:" %%a in ('type "%tempDir%\PartInfo.txt" ^| find "类型  :"') do (
  60.     for /f "tokens=1" %%b in ("%%a") do (
  61.         set "id=%%b"
  62.     )
  63. )

  64. if not defined id (
  65.     echo 无法获取分区ID!
  66.     pause
  67.     goto MAIN_MENU
  68. )

  69. :: 根据ID判断操作
  70. if "%id:~0,1%"=="1" (
  71.     set operation=显示
  72.     set newId=0%id:~1,1%
  73. ) else if "%id:~0,1%"=="0" (
  74.     set operation=隐藏
  75.     set newId=1%id:~1,1%
  76. ) else (
  77.     echo 分区%partitionNum%的ID类型为: %id%
  78.     pause
  79.     goto MAIN_MENU
  80. )

  81. :CONFIRM_OPERATION
  82. echo.
  83. set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
  84. if /i "%choice%"=="N" goto MAIN_MENU
  85. if /i not "%choice%"=="Y" goto CONFIRM_OPERATION

  86. :: 执行操作
  87. (
  88.     echo select disk %choiceDisk%
  89.     echo select partition %partitionNum%
  90.     echo set id=%newId%
  91.     echo exit
  92. ) > "%tempDir%\DiskPart.txt"

  93. diskpart /s "%tempDir%\DiskPart.txt"
  94. echo.
  95. echo 分区%partitionNum%已成功%operation%!
  96. echo.
  97. pause
  98. goto MAIN_MENU               
复制代码
更新代码:
  1. @ECHO OFF
  2. Title MBR磁盘的显示与隐藏
  3. mode con lines=36 cols=90
  4. color 1f
  5. setlocal enabledelayedexpansion

  6. :: 获取管理员权限
  7. >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
  8.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
  9.     ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
  10.     CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
  11. pushd "%CD%"&& CD /D "%~dp0"  

  12. :: 设置临时目录
  13. if not exist "%temp%\DiskPart" mkdir "%temp%\DiskPart"
  14. set "tempDir=%temp%\DiskPart"

  15. :MAIN_MENU
  16. cls
  17. echo.
  18. echo 当前磁盘列表:
  19. echo list disk > "%tempDir%\DiskPart.txt"
  20. echo exit >> "%tempDir%\DiskPart.txt"
  21. diskpart /s "%tempDir%\DiskPart.txt"

  22. :: 尝试获取磁盘详细信息
  23. echo.
  24. echo 磁盘详细信息:
  25. echo ========================================

  26. :: 方法1:尝试使用WMIC(如果可用)
  27. where wmic >nul 2>&1
  28. if not errorlevel 1 (
  29.     for /f "tokens=1,2 delims=:" %%a in ('wmic diskdrive get index^,model^,size /value ^| findstr "Index="') do (
  30.         set "diskIdx=%%a"
  31.         set "diskModel=%%b"
  32.         setlocal enabledelayedexpansion
  33.         set "diskIdx=!diskIdx:Index=!"
  34.         set "diskIdx=!diskIdx:=!"
  35.         set "diskModel=!diskModel:Model=!"
  36.         set "diskModel=!diskModel:=!"
  37.         
  38.         echo 磁盘 !diskIdx! - 型号: !diskModel!
  39.         endlocal
  40.     )
  41. ) else (
  42.     :: 方法2:使用PowerShell获取磁盘信息(如果WMIC不可用)
  43.     where powershell >nul 2>&1
  44.     if not errorlevel 1 (
  45.         for /f "tokens=1-3 delims=," %%a in ('powershell -command "Get-Disk | Select-Object Number, FriendlyName, @{Name='SizeGB';Expression={[math]::Round($_.Size/1GB,2)}} | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1"') do (
  46.             set "diskNum=%%a"
  47.             set "diskName=%%b"
  48.             set "diskSize=%%c"
  49.             setlocal enabledelayedexpansion
  50.             echo 磁盘 !diskNum! - 名称: !diskName! - 大小: !diskSize! GB
  51.             endlocal
  52.         )
  53.     ) else (
  54.         :: 方法3:如果两者都不可用,只显示基本磁盘编号
  55.         echo 无法获取详细磁盘信息,仅显示磁盘编号
  56.         echo 请确保系统中有WMIC或PowerShell可用
  57.     )
  58. )

  59. echo ========================================

  60. :GET_DISK_NUMBER
  61. echo.
  62. set /p "choiceDisk=请输入要操作的磁盘编号:"
  63. if not defined choiceDisk goto GET_DISK_NUMBER

  64. :: 检查输入是否全为数字
  65. set "isValid=1"
  66. for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
  67. if "%isValid%"=="0" (
  68.     echo 错误:请输入有效的数字!
  69.     goto GET_DISK_NUMBER
  70. )

  71. :: 获取分区列表
  72. echo select disk %choiceDisk% > "%tempDir%\DiskPart.txt"
  73. echo list partition >> "%tempDir%\DiskPart.txt"
  74. echo exit >> "%tempDir%\DiskPart.txt"
  75. diskpart /s "%tempDir%\DiskPart.txt"

  76. :GET_PARTITION_NUMBER
  77. echo.
  78. set /p "partitionNum=请输入要操作的分区编号:"
  79. if not defined partitionNum goto GET_PARTITION_NUMBER

  80. :: 检查输入是否全为数字
  81. set "isValid=1"
  82. for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
  83. if "%isValid%"=="0" (
  84.     echo 错误:请输入有效的数字!
  85.     goto GET_PARTITION_NUMBER
  86. )

  87. :: 获取分区详细信息
  88. (
  89.     echo select disk %choiceDisk%
  90.     echo select partition %partitionNum%
  91.     echo detail partition
  92.     echo exit
  93. ) > "%tempDir%\DiskPart.txt"

  94. diskpart /s "%tempDir%\DiskPart.txt" > "%tempDir%\PartInfo.txt"

  95. :: 提取分区类型ID
  96. set "id="
  97. for /f "tokens=2 delims=:" %%a in ('type "%tempDir%\PartInfo.txt" ^| find "类型  :"') do (
  98.     for /f "tokens=1" %%b in ("%%a") do (
  99.         set "id=%%b"
  100.     )
  101. )

  102. if not defined id (
  103.     echo 无法获取分区ID!
  104.     pause
  105.     goto MAIN_MENU
  106. )

  107. :: 根据ID判断操作
  108. if "%id:~0,1%"=="1" (
  109.     set operation=显示
  110.     set newId=0%id:~1,1%
  111. ) else if "%id:~0,1%"=="0" (
  112.     set operation=隐藏
  113.     set newId=1%id:~1,1%
  114. ) else (
  115.     echo 分区%partitionNum%的ID类型为: %id%
  116.     pause
  117.     goto MAIN_MENU
  118. )

  119. :CONFIRM_OPERATION
  120. echo.
  121. set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
  122. if /i "%choice%"=="N" goto MAIN_MENU
  123. if /i not "%choice%"=="Y" goto CONFIRM_OPERATION

  124. :: 执行操作
  125. (
  126.     echo select disk %choiceDisk%
  127.     echo select partition %partitionNum%
  128.     echo set id=%newId%
  129.     echo exit
  130. ) > "%tempDir%\DiskPart.txt"

  131. diskpart /s "%tempDir%\DiskPart.txt"
  132. echo.
  133. echo 分区%partitionNum%已成功%operation%!
  134. echo.
  135. pause
  136. goto MAIN_MENU
复制代码

2#
发表于 2025-5-6 23:06:05 | 只看该作者
学习了
回复

使用道具 举报

3#
发表于 2025-5-6 23:06:40 | 只看该作者
进来看看
回复

使用道具 举报

4#
发表于 2025-5-7 05:10:42 | 只看该作者
使用看看,感谢分享!
回复

使用道具 举报

5#
发表于 2025-5-7 06:16:52 | 只看该作者
学习了
回复

使用道具 举报

6#
发表于 2025-5-7 06:51:37 | 只看该作者
谢谢分享!
回复

使用道具 举报

7#
发表于 2025-5-7 07:30:06 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 2025-5-7 08:13:17 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

9#
发表于 2025-5-7 08:21:38 | 只看该作者
多谢楼主分享
回复

使用道具 举报

10#
发表于 2025-5-7 08:34:26 | 只看该作者
GPT分区表不行吗 ?

点评

GPT分区隐藏机制不一样,容我研究一下。  详情 回复 发表于 2025-5-7 12:36
回复

使用道具 举报

11#
发表于 2025-5-7 09:04:58 | 只看该作者
本帖最后由 dayeye 于 2025-5-7 09:12 编辑

能不能在磁盘列表中显示物理磁盘类型(型号),多硬盘时好区分;另外标出VHD盘,Ramdisk盘?比如diskgenius列表。


可用空间为什么显示不出来?


目前已经很好用了。感谢分享。


点评

或者这个:  详情 回复 发表于 2025-5-7 11:04
试试这个:  详情 回复 发表于 2025-5-7 10:57
回复

使用道具 举报

12#
发表于 2025-5-7 09:06:51 | 只看该作者

感谢分享
回复

使用道具 举报

13#
发表于 2025-5-7 09:09:28 | 只看该作者

谢谢分享!
回复

使用道具 举报

14#
 楼主| 发表于 2025-5-7 10:57:20 | 只看该作者
dayeye 发表于 2025-5-7 09:04
能不能在磁盘列表中显示物理磁盘类型(型号),多硬盘时好区分;另外标出VHD盘,Ramdisk盘?比如diskgenius ...

试试这个:
  1. @ECHO OFF
  2. Title MBR磁盘的显示与隐藏
  3. mode con lines=36 cols=90
  4. color 1f
  5. setlocal enabledelayedexpansion

  6. :: 获取管理员权限
  7. >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
  8.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
  9.     ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
  10.     CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
  11. pushd "%CD%"&& CD /D "%~dp0"  

  12. :: 设置临时目录
  13. if not exist "%temp%\DiskPart" mkdir "%temp%\DiskPart"
  14. set "tempDir=%temp%\DiskPart"

  15. :MAIN_MENU
  16. cls
  17. echo.
  18. echo 当前磁盘列表(带型号信息):
  19. echo list disk > "%tempDir%\DiskPart.txt"
  20. echo exit >> "%tempDir%\DiskPart.txt"
  21. diskpart /s "%tempDir%\DiskPart.txt"

  22. :: 使用WMIC获取更详细的磁盘信息
  23. echo.
  24. echo 磁盘详细信息:
  25. echo ========================================
  26. for /f "tokens=1,2 delims=:" %%a in ('wmic diskdrive get index^,model^,size /value ^| findstr "Index="') do (
  27.     set "diskIdx=%%a"
  28.     set "diskModel=%%b"
  29.     setlocal enabledelayedexpansion
  30.     set "diskIdx=!diskIdx:Index=!"
  31.     set "diskIdx=!diskIdx:=!"
  32.     set "diskModel=!diskModel:Model=!"
  33.     set "diskModel=!diskModel:=!"
  34.    
  35.     :: 检查是否为VHD磁盘
  36.     set "isVHD=0"
  37.     for /f "tokens=*" %%i in ('wmic diskdrive where "Index=!diskIdx!" get Caption /value ^| findstr "VHD"') do set "isVHD=1"
  38.    
  39.     :: 检查是否为Ramdisk
  40.     set "isRamdisk=0"
  41.     for /f "tokens=*" %%i in ('wmic diskdrive where "Index=!diskIdx!" get PNPDeviceID /value ^| findstr "RAMDRIVE"') do set "isRamdisk=1"
  42.    
  43.     :: 显示磁盘信息
  44.     echo 磁盘 !diskIdx! - 型号: !diskModel!
  45.     if !isVHD! equ 1 echo     [VHD虚拟磁盘]
  46.     if !isRamdisk! equ 1 echo     [Ramdisk内存盘]
  47.     echo.
  48.     endlocal
  49. )
  50. echo ========================================

  51. :GET_DISK_NUMBER
  52. echo.
  53. set /p "choiceDisk=请输入要操作的磁盘编号:"
  54. if not defined choiceDisk goto GET_DISK_NUMBER

  55. :: 检查输入是否全为数字
  56. set "isValid=1"
  57. for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
  58. if "%isValid%"=="0" (
  59.     echo 错误:请输入有效的数字!
  60.     goto GET_DISK_NUMBER
  61. )

  62. :: 获取分区列表
  63. echo select disk %choiceDisk% > "%tempDir%\DiskPart.txt"
  64. echo list partition >> "%tempDir%\DiskPart.txt"
  65. echo exit >> "%tempDir%\DiskPart.txt"
  66. diskpart /s "%tempDir%\DiskPart.txt"

  67. :GET_PARTITION_NUMBER
  68. echo.
  69. set /p "partitionNum=请输入要操作的分区编号:"
  70. if not defined partitionNum goto GET_PARTITION_NUMBER

  71. :: 检查输入是否全为数字
  72. set "isValid=1"
  73. for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
  74. if "%isValid%"=="0" (
  75.     echo 错误:请输入有效的数字!
  76.     goto GET_PARTITION_NUMBER
  77. )

  78. :: 获取分区详细信息
  79. (
  80.     echo select disk %choiceDisk%
  81.     echo select partition %partitionNum%
  82.     echo detail partition
  83.     echo exit
  84. ) > "%tempDir%\DiskPart.txt"

  85. diskpart /s "%tempDir%\DiskPart.txt" > "%tempDir%\PartInfo.txt"

  86. :: 提取分区类型ID
  87. set "id="
  88. for /f "tokens=2 delims=:" %%a in ('type "%tempDir%\PartInfo.txt" ^| find "类型  :"') do (
  89.     for /f "tokens=1" %%b in ("%%a") do (
  90.         set "id=%%b"
  91.     )
  92. )

  93. if not defined id (
  94.     echo 无法获取分区ID!
  95.     pause
  96.     goto MAIN_MENU
  97. )

  98. :: 根据ID判断操作
  99. if "%id:~0,1%"=="1" (
  100.     set operation=显示
  101.     set newId=0%id:~1,1%
  102. ) else if "%id:~0,1%"=="0" (
  103.     set operation=隐藏
  104.     set newId=1%id:~1,1%
  105. ) else (
  106.     echo 分区%partitionNum%的ID类型为: %id%
  107.     pause
  108.     goto MAIN_MENU
  109. )

  110. :CONFIRM_OPERATION
  111. echo.
  112. set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
  113. if /i "%choice%"=="N" goto MAIN_MENU
  114. if /i not "%choice%"=="Y" goto CONFIRM_OPERATION

  115. :: 执行操作
  116. (
  117.     echo select disk %choiceDisk%
  118.     echo select partition %partitionNum%
  119.     echo set id=%newId%
  120.     echo exit
  121. ) > "%tempDir%\DiskPart.txt"

  122. diskpart /s "%tempDir%\DiskPart.txt"
  123. echo.
  124. echo 分区%partitionNum%已成功%operation%!
  125. echo.
  126. pause
  127. goto MAIN_MENU
复制代码

点评

[attachimg]558130[/attachimg]  详情 回复 发表于 2025-5-7 11:38
回复

使用道具 举报

15#
 楼主| 发表于 2025-5-7 11:04:29 | 只看该作者
dayeye 发表于 2025-5-7 09:04
能不能在磁盘列表中显示物理磁盘类型(型号),多硬盘时好区分;另外标出VHD盘,Ramdisk盘?比如diskgenius ...

或者这个:
  1. @ECHO OFF
  2. Title MBR磁盘的显示与隐藏
  3. mode con lines=36 cols=90
  4. color 1f
  5. setlocal enabledelayedexpansion

  6. :: 获取管理员权限
  7. >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
  8.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
  9.     ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
  10.     CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
  11. pushd "%CD%"&& CD /D "%~dp0"  

  12. :: 设置临时目录
  13. if not exist "%temp%\DiskPart" mkdir "%temp%\DiskPart"
  14. set "tempDir=%temp%\DiskPart"

  15. :MAIN_MENU
  16. cls
  17. echo.
  18. echo 当前磁盘列表:
  19. echo list disk > "%tempDir%\DiskPart.txt"
  20. echo exit >> "%tempDir%\DiskPart.txt"
  21. diskpart /s "%tempDir%\DiskPart.txt"

  22. :: 尝试获取磁盘详细信息
  23. echo.
  24. echo 磁盘详细信息:
  25. echo ========================================

  26. :: 方法1:尝试使用WMIC(如果可用)
  27. where wmic >nul 2>&1
  28. if not errorlevel 1 (
  29.     for /f "tokens=1,2 delims=:" %%a in ('wmic diskdrive get index^,model^,size /value ^| findstr "Index="') do (
  30.         set "diskIdx=%%a"
  31.         set "diskModel=%%b"
  32.         setlocal enabledelayedexpansion
  33.         set "diskIdx=!diskIdx:Index=!"
  34.         set "diskIdx=!diskIdx:=!"
  35.         set "diskModel=!diskModel:Model=!"
  36.         set "diskModel=!diskModel:=!"
  37.         
  38.         echo 磁盘 !diskIdx! - 型号: !diskModel!
  39.         endlocal
  40.     )
  41. ) else (
  42.     :: 方法2:使用PowerShell获取磁盘信息(如果WMIC不可用)
  43.     where powershell >nul 2>&1
  44.     if not errorlevel 1 (
  45.         for /f "tokens=1-3 delims=," %%a in ('powershell -command "Get-Disk | Select-Object Number, FriendlyName, @{Name='SizeGB';Expression={[math]::Round($_.Size/1GB,2)}} | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1"') do (
  46.             set "diskNum=%%a"
  47.             set "diskName=%%b"
  48.             set "diskSize=%%c"
  49.             setlocal enabledelayedexpansion
  50.             echo 磁盘 !diskNum! - 名称: !diskName! - 大小: !diskSize! GB
  51.             endlocal
  52.         )
  53.     ) else (
  54.         :: 方法3:如果两者都不可用,只显示基本磁盘编号
  55.         echo 无法获取详细磁盘信息,仅显示磁盘编号
  56.         echo 请确保系统中有WMIC或PowerShell可用
  57.     )
  58. )

  59. echo ========================================

  60. :GET_DISK_NUMBER
  61. echo.
  62. set /p "choiceDisk=请输入要操作的磁盘编号:"
  63. if not defined choiceDisk goto GET_DISK_NUMBER

  64. :: 检查输入是否全为数字
  65. set "isValid=1"
  66. for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
  67. if "%isValid%"=="0" (
  68.     echo 错误:请输入有效的数字!
  69.     goto GET_DISK_NUMBER
  70. )

  71. :: 获取分区列表
  72. echo select disk %choiceDisk% > "%tempDir%\DiskPart.txt"
  73. echo list partition >> "%tempDir%\DiskPart.txt"
  74. echo exit >> "%tempDir%\DiskPart.txt"
  75. diskpart /s "%tempDir%\DiskPart.txt"

  76. :GET_PARTITION_NUMBER
  77. echo.
  78. set /p "partitionNum=请输入要操作的分区编号:"
  79. if not defined partitionNum goto GET_PARTITION_NUMBER

  80. :: 检查输入是否全为数字
  81. set "isValid=1"
  82. for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
  83. if "%isValid%"=="0" (
  84.     echo 错误:请输入有效的数字!
  85.     goto GET_PARTITION_NUMBER
  86. )

  87. :: 获取分区详细信息
  88. (
  89.     echo select disk %choiceDisk%
  90.     echo select partition %partitionNum%
  91.     echo detail partition
  92.     echo exit
  93. ) > "%tempDir%\DiskPart.txt"

  94. diskpart /s "%tempDir%\DiskPart.txt" > "%tempDir%\PartInfo.txt"

  95. :: 提取分区类型ID
  96. set "id="
  97. for /f "tokens=2 delims=:" %%a in ('type "%tempDir%\PartInfo.txt" ^| find "类型  :"') do (
  98.     for /f "tokens=1" %%b in ("%%a") do (
  99.         set "id=%%b"
  100.     )
  101. )

  102. if not defined id (
  103.     echo 无法获取分区ID!
  104.     pause
  105.     goto MAIN_MENU
  106. )

  107. :: 根据ID判断操作
  108. if "%id:~0,1%"=="1" (
  109.     set operation=显示
  110.     set newId=0%id:~1,1%
  111. ) else if "%id:~0,1%"=="0" (
  112.     set operation=隐藏
  113.     set newId=1%id:~1,1%
  114. ) else (
  115.     echo 分区%partitionNum%的ID类型为: %id%
  116.     pause
  117.     goto MAIN_MENU
  118. )

  119. :CONFIRM_OPERATION
  120. echo.
  121. set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
  122. if /i "%choice%"=="N" goto MAIN_MENU
  123. if /i not "%choice%"=="Y" goto CONFIRM_OPERATION

  124. :: 执行操作
  125. (
  126.     echo select disk %choiceDisk%
  127.     echo select partition %partitionNum%
  128.     echo set id=%newId%
  129.     echo exit
  130. ) > "%tempDir%\DiskPart.txt"

  131. diskpart /s "%tempDir%\DiskPart.txt"
  132. echo.
  133. echo 分区%partitionNum%已成功%operation%!
  134. echo.
  135. pause
  136. goto MAIN_MENU
复制代码

点评

[attachimg]558131[/attachimg]  详情 回复 发表于 2025-5-7 11:38
回复

使用道具 举报

16#
发表于 2025-5-7 11:38:21 | 只看该作者


回复

使用道具 举报

17#
发表于 2025-5-7 11:38:59 | 只看该作者


点评

在我的磁盘上是可以正确显示的。  详情 回复 发表于 2025-5-7 12:12
回复

使用道具 举报

18#
 楼主| 发表于 2025-5-7 12:12:56 | 只看该作者

在我的磁盘上是可以正确显示的。
回复

使用道具 举报

19#
发表于 2025-5-7 12:18:08 | 只看该作者
VHD,RAMDISK都无所谓。
这个标识为27的恢复分区,显示不出来。

用diskgenius取消隐藏,fat32格式的恢复分区标识27会改成0B;
NTFS格式的恢复分区27会改为37,查看还是隐藏,再取消隐藏,标识会改为07。

点评

对于分区表类型为 MBR 格式的U盘,注意微软分区表项里关于隐藏分区标识的定义,比如,FAT16 分区标识是 06, 那么,隐藏表示就是 16;FAT32分区标识是 0C,那么,隐藏表示就是 1C;同理,NTFS 分区标识是 07,那  详情 回复 发表于 2025-5-7 14:50
回复

使用道具 举报

20#
 楼主| 发表于 2025-5-7 12:36:45 | 只看该作者
likeyouli 发表于 2025-5-7 08:34
GPT分区表不行吗 ?

GPT分区隐藏机制不一样,容我研究一下。
回复

使用道具 举报

21#
发表于 2025-5-7 12:44:23 | 只看该作者
感谢楼主分享
只是个人想不到使用场景
回复

使用道具 举报

22#
发表于 2025-5-7 13:09:25 | 只看该作者
感谢分享!
回复

使用道具 举报

23#
 楼主| 发表于 2025-5-7 14:50:49 | 只看该作者
本帖最后由 青青草 于 2025-5-7 14:51 编辑
dayeye 发表于 2025-5-7 12:18
VHD,RAMDISK都无所谓。
这个标识为27的恢复分区,显示不出来。

对于分区表类型为 MBR 格式的U盘,注意微软分区表项里关于隐藏分区标识的定义,比如,FAT16 分区标识是 06,

那么,隐藏表示就是 16;FAT32分区标识是 0C,那么,隐藏表示就是 1C;同理,NTFS 分区标识是 07,那么,隐藏表

示就是 17。
批处理只处理了ID=1*(如,17,1C ),对于你的情况,两个处理途径:1、利用diskgenius更改ID=27为ID=17;2、修改批处理,增加 if "%id:~0,1%"=="2"   的情况。   

点评

好的,谢谢!!!  详情 回复 发表于 2025-5-7 15:20
回复

使用道具 举报

24#
发表于 2025-5-7 15:05:24 | 只看该作者
谢谢分享
回复

使用道具 举报

25#
发表于 2025-5-7 15:05:28 | 只看该作者
感谢分享
回复

使用道具 举报

26#
发表于 2025-5-7 15:20:09 | 只看该作者
青青草 发表于 2025-5-7 14:50
对于分区表类型为 MBR 格式的U盘,注意微软分区表项里关于隐藏分区标识的定义,比如,FAT16 分区标识是 0 ...

好的,谢谢!!!

点评

直接修改批处理: if "%id:~0,1%"=="1" 修改为:if not "%id:~0,1%"=="0"  详情 回复 发表于 2025-5-7 15:42
回复

使用道具 举报

27#
 楼主| 发表于 2025-5-7 15:42:55 | 只看该作者
dayeye 发表于 2025-5-7 15:20
好的,谢谢!!!

直接修改批处理: if "%id:~0,1%"=="1" 修改为:if not "%id:~0,1%"=="0"
回复

使用道具 举报

28#
发表于 2025-5-7 16:23:21 | 只看该作者
收藏,有空看看
回复

使用道具 举报

29#
发表于 2025-5-7 17:03:56 | 只看该作者
感谢分享
回复

使用道具 举报

30#
发表于 2025-5-7 17:06:25 | 只看该作者
谢谢分享!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-6-1 15:52

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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