无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3919|回复: 3
打印 上一主题 下一主题

[原创] 显示、隐藏分区批处理

[复制链接]
跳转到指定楼层
1#
发表于 2012-12-9 22:22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
显示、隐藏分区批处理

本批处理仅支持 windows 7 以上版本的操作系统(包括相应版本的PE)XP 2003 环境下不可用。
可对分区进行隐藏、显示操作。隐藏方式为OEM分区。
代码如下,将文件保存到文本文档,并将后缀改为“.cmd”或“.bat”(不包括引号)。

@echo off
if not exist %systemroot%\System32\zh-CN\diskpart.exe.mui exit
setlocal enabledelayedexpansion
>%temp%\d.log echo list disk
set /a "n=0"&for /f "tokens=2" %%i in ('%systemroot%\system32\diskpart.exe /s %temp%\d.log^|%systemroot%\system32\find.exe "GB"') do set /a "n+=1"&set "d!n!=%%i"
if !n!==1 (set /a "isd=0") else (call :sd)
set "tp="
:sp
>%temp%\d.log (echo select disk !isd!&echo list partition)
set /a "m=0"&for /f "tokens=2,3,4,5" %%i in ('%systemroot%\system32\diskpart.exe /s %temp%\d.log^|%systemroot%\system32\find.exe "分区  "') do (if "%%i" neq "0" set /a "m+=1"&set "p!m!=%%i"&set "l!m!=%%j"&set "s!m!=%%k"&set "b!m!=%%l")
>%temp%\d.log echo select disk !isd!
for /l %%i in (1,1,!m!) do >>%temp%\d.log (echo select partition %%i&echo detail partition)
set /a "l=0"&for /f "delims=: tokens=2" %%i in ('%systemroot%\system32\diskpart.exe /s %temp%\d.log^|%systemroot%\system32\find.exe "类型  :"') do (set /a "l+=1"
if "%%i"==" 07" set y!l!=普通
if "%%i"==" 12" set y!l!=隐藏
if "%%i" neq " 07" if "%%i" neq " 12" set y!l!=未知)
cls&echo.&echo   分区 ###       类型              大小     状态&echo   -------------  ----------------  -------  -------
for /l %%i in (1,1,!m!) do echo   分区  !p%%i!        !l%%i!              !s%%i! !b%%i!     !y%%i!
echo.

if not defined tp (
echo 将对相应编号的分区进行显示、隐藏的转换
set "isp="&set /p isp=输入分区编号:
for /l %%i in (1,1,!m!) do (if "!p%%i!"=="!isp!" set tp=!isp!)
if not defined tp call :err&goto sp
call :cid
>%temp%\d.log (echo select disk !isd!&echo select partition !isp!&echo set id=!id! override)
cls&echo.&echo  处理中...
>nul %systemroot%\system32\diskpart.exe /s %temp%\d.log
goto sp) else (echo.&echo 请按任意键退出&pause>nul&exit)

:sd
cls&echo.
for /f "skip=4 tokens=*" %%i in ('%systemroot%\system32\diskpart.exe /s %temp%\d.log') do echo  %%i
echo.
set "td="&set "isd="&set /p isd=输入磁盘编号:
for /l %%i in (1,1,!n!) do (if "!d%%i!"=="!isd!" set td=!isd!)
if not defined td call :err&goto sd
goto :eof

:err
cls&echo.&echo 输入错误,请重新输入&pause>nul
goto :eof

:cid
if "!y%isp%!"=="普通" set "id=12"&goto :eof
if "!y%isp%!"=="隐藏" set "id=07"&goto :eof
if "!y%isp%!" neq "普通" if "!y%isp%!" neq "隐藏" set "tp="&call :err&goto sp

[ 本帖最后由 2012raps 于 2012-12-11 19:53 编辑 ]
2#
发表于 2012-12-10 21:06:07 | 只看该作者
dddd1111111111
回复

使用道具 举报

3#
发表于 2012-12-11 11:16:18 | 只看该作者
XP下%systemroot%\System32\zh-CN\diskpart.exe.mui不在在吧,还有diskpart.exe.mui采用的什么版本,在XP下能正常运行吗?
回复

使用道具 举报

4#
 楼主| 发表于 2012-12-11 19:51:50 | 只看该作者

回复 #3 19720205 的帖子

今天测试了一下,这个在XP 下无法运行
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-28 07:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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