|
本帖最后由 青青草 于 2025-5-7 11:09 编辑
MBR磁盘的显示与隐藏更新代码:- @ECHO OFF
- Title MBR磁盘的显示与隐藏
- mode con lines=36 cols=90
- color 1f
- setlocal enabledelayedexpansion
- :: 获取管理员权限
- >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
- ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
- ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
- CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
- pushd "%CD%"&& CD /D "%~dp0"
- :: 设置临时目录
- if not exist "%temp%\DiskPart" mkdir "%temp%\DiskPart"
- set "tempDir=%temp%\DiskPart"
- :MAIN_MENU
- cls
- echo.
- echo 当前磁盘列表:
- echo list disk > "%tempDir%\DiskPart.txt"
- echo exit >> "%tempDir%\DiskPart.txt"
- diskpart /s "%tempDir%\DiskPart.txt"
- :: 尝试获取磁盘详细信息
- echo.
- echo 磁盘详细信息:
- echo ========================================
- :: 方法1:尝试使用WMIC(如果可用)
- where wmic >nul 2>&1
- if not errorlevel 1 (
- for /f "tokens=1,2 delims=:" %%a in ('wmic diskdrive get index^,model^,size /value ^| findstr "Index="') do (
- set "diskIdx=%%a"
- set "diskModel=%%b"
- setlocal enabledelayedexpansion
- set "diskIdx=!diskIdx:Index=!"
- set "diskIdx=!diskIdx:=!"
- set "diskModel=!diskModel:Model=!"
- set "diskModel=!diskModel:=!"
-
- echo 磁盘 !diskIdx! - 型号: !diskModel!
- endlocal
- )
- ) else (
- :: 方法2:使用PowerShell获取磁盘信息(如果WMIC不可用)
- where powershell >nul 2>&1
- if not errorlevel 1 (
- 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 (
- set "diskNum=%%a"
- set "diskName=%%b"
- set "diskSize=%%c"
- setlocal enabledelayedexpansion
- echo 磁盘 !diskNum! - 名称: !diskName! - 大小: !diskSize! GB
- endlocal
- )
- ) else (
- :: 方法3:如果两者都不可用,只显示基本磁盘编号
- echo 无法获取详细磁盘信息,仅显示磁盘编号
- echo 请确保系统中有WMIC或PowerShell可用
- )
- )
- echo ========================================
- :GET_DISK_NUMBER
- echo.
- set /p "choiceDisk=请输入要操作的磁盘编号:"
- if not defined choiceDisk goto GET_DISK_NUMBER
- :: 检查输入是否全为数字
- set "isValid=1"
- for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
- if "%isValid%"=="0" (
- echo 错误:请输入有效的数字!
- goto GET_DISK_NUMBER
- )
- :: 获取分区列表
- echo select disk %choiceDisk% > "%tempDir%\DiskPart.txt"
- echo list partition >> "%tempDir%\DiskPart.txt"
- echo exit >> "%tempDir%\DiskPart.txt"
- diskpart /s "%tempDir%\DiskPart.txt"
- :GET_PARTITION_NUMBER
- echo.
- set /p "partitionNum=请输入要操作的分区编号:"
- if not defined partitionNum goto GET_PARTITION_NUMBER
- :: 检查输入是否全为数字
- set "isValid=1"
- for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
- if "%isValid%"=="0" (
- echo 错误:请输入有效的数字!
- goto GET_PARTITION_NUMBER
- )
- :: 获取分区详细信息
- (
- echo select disk %choiceDisk%
- echo select partition %partitionNum%
- echo detail partition
- echo exit
- ) > "%tempDir%\DiskPart.txt"
- diskpart /s "%tempDir%\DiskPart.txt" > "%tempDir%\PartInfo.txt"
- :: 提取分区类型ID
- set "id="
- for /f "tokens=2 delims=:" %%a in ('type "%tempDir%\PartInfo.txt" ^| find "类型 :"') do (
- for /f "tokens=1" %%b in ("%%a") do (
- set "id=%%b"
- )
- )
- if not defined id (
- echo 无法获取分区ID!
- pause
- goto MAIN_MENU
- )
- :: 根据ID判断操作
- if "%id:~0,1%"=="1" (
- set operation=显示
- set newId=0%id:~1,1%
- ) else if "%id:~0,1%"=="0" (
- set operation=隐藏
- set newId=1%id:~1,1%
- ) else (
- echo 分区%partitionNum%的ID类型为: %id%
- pause
- goto MAIN_MENU
- )
- :CONFIRM_OPERATION
- echo.
- set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
- if /i "%choice%"=="N" goto MAIN_MENU
- if /i not "%choice%"=="Y" goto CONFIRM_OPERATION
- :: 执行操作
- (
- echo select disk %choiceDisk%
- echo select partition %partitionNum%
- echo set id=%newId%
- echo exit
- ) > "%tempDir%\DiskPart.txt"
- diskpart /s "%tempDir%\DiskPart.txt"
- echo.
- echo 分区%partitionNum%已成功%operation%!
- echo.
- pause
- goto MAIN_MENU
复制代码
|
|