|
本帖最后由 dos时代菜鸟 于 2018-3-13 10:38 编辑
增加点儿人气,呵呵,只贴源码,不贴文件,方便讨论,方便更新,不必上传。,需要的,自己复制粘贴成脚本吧。
还是贴个文件,不然不知道 需求量,
L-D_drv6.2.cmd.zip
(1.68 KB, 下载次数: 129)
脚本小,却有很多思考。
比如
remove 的 dismount 参数的 特点
如何 获取 某文件 某行,第一个单词 和 该行 地n个字符
如何分析 提取 混乱 文本中 特定特点 的 某行内容
如果 用 文本中 上一行的内容 做标记 来 确定本行是 所要数据行
cmd脚本中 程序段 call :lable 的使用 和 Exit /b 的使用
考虑英文环境的存在,搜索特定行 用的关键字 不能是中文,
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- COLOR 0A
- mode con: lines=40 cols=120
- title 挂/卸载分区
- :确定硬盘序列,并生成 罗列分区信息
- :top1
- echo 正在探测数据........
- >%temp%\disk_load.txt echo list vol
- >%temp%\dl.txt diskpart /s %temp%\disk_load.txt
- call :fresh
- :top2
- cls
- echo Diskpart 挂/卸载分区 Diskpart_Ver:%ver%
- echo --------------------------------------------------------------------------------------------
- echo Vol 盘符 标签 FS 类型 大小 状态 信息
- echo ---- ----- ----------- ----- ------------ --------- --------- --------
- set m=-1
- for /f "tokens=*" %%o in (%temp%\part_list.txt) do ( ECHO %%o & set /a m=!m!+1)
- echo --------------------------------------------------------------------------------------------
- set n=-1
- set /p n=请输入待处理卷对应的卷号(Vol):0-!m!,r刷新,x退出:
- if /i "!n!"=="x" goto x
- if /i "!n!"=="r" goto top1
- echo --------------------------------------------------------------------------------------------
- call :drv_x & if errorlevel 9 goto top2
- call :L & if errorlevel 9 goto top2
- echo ------------------------------------------
- call :script
- ))
- goto top2
- :分配盘符
- :L
- set d=!drvs:~0,1!
- set /p d=请输入一个新盘符,!drvs!默认!drvs:~0,1!,0卸载,9返回,回车确认:
- if "!d!"=="9" exit /b 9
- if "!d!"=="0" goto l2
- :l1
- set f=0
- for %%c in (%drvs%) do (if /i "%%c"=="!d!" set f=1)
- if !f!==0 (echo 输入错误,按任意键重新来过... & pause>nul & exit /b 9)
- >>%temp%\disk_load.txt echo assign letter=!d!
- goto l_ok
- :l2
- if not "!dm!"=="" ( if "!drv!"==" " ( >>%temp%\disk_load.txt echo assign) )
- >>%temp%\disk_load.txt echo remove !dm! noerr
- :l_ok
- >>%temp%\disk_load.txt echo list vol
- echo 正在生载脚本...
- exit /b 1
- :运行脚本
- :script
- echo Script (disk_!dx!:!px!):
- echo ------------------------------------------
- type %temp%\disk_load.txt
- echo ------------------------------------------
- echo 按任意键开始处理.........
- pause>nul
- echo 正在运行脚本并刷新数据......
- >%temp%\dl.txt diskpart /s %temp%\disk_load.txt
- call :fresh
- exit /b 1
- :检验选取分区是否正确,并生成diskpart基本脚本
- :drv_x
- echo 正在验证所选^(!n!^),探测对应分区................
- set select=
- for /f "tokens=*" %%c in (%temp%\part_list.txt) do (
- set drv=%%c
- set drv=!drv:~6,1!
- for /f "tokens=1,*" %%d in ("%%c") do (set q=%%d)
- if "!n!"=="!q!" (rem 生成卸载脚本
- set select=ok
- >%temp%\dx.txt echo select vol !n!
- >>%temp%\dx.txt echo list disk
- >>%temp%\dx.txt echo list partition
- set dx=
- set px=
- for /f "tokens=1,2,3,*" %%c in ('diskpart /s %temp%\dx.txt') do (
- if "%%c"=="*" (if "!dx!"=="" set dx=%%e)
- if "%%c"=="*" (if not "!dx!"=="" set px=%%e )
- )
- if not "!dx!"=="" (if not "!px!"=="" (
- >%temp%\disk_load.txt echo select disk !dx!
- >>%temp%\disk_load.txt echo select partition !px!
- )) else (
- echo 无法确定所选卷^(!n!^)对应的硬盘和分区,将直接处理卷.......
- >%temp%\disk_load.txt echo select vol !n!
- )
- exit /b 0
- )
- )
- if not "!select!"=="ok" (
- echo 选择错误,按任意键重新选择.....
- pause>nul
- )
- exit /b 9
- :fresh
- rem 分析 diskpart 脚本运行结果(dl.txt)----整理出硬盘分区序列(part_list.txt)
- >%temp%\part_list.txt echo.
- set t0=
- for /f "tokens=1,*" %%c in (%temp%\dl.txt) do (
- set l0=%%c
- if "%%c"=="Microsoft" (for /f "tokens=3" %%e in ("%%d") do (set ver=%%e))
- if "!l0:~0,1!"=="-" set "t0=ok"
- if "!t0!"=="ok" (if not "!l0:~0,1!"=="-" (
- if "%%c"=="*" (for /f "tokens=1,*" %%r in ("%%d") do (echo %%s>>%temp%\part_list.txt )
- ) else (echo %%d>>%temp%\part_list.txt )
- ))
- )
- set dm=dismount
- for /f "delims=. tokens=1" %%x in ("!ver!") do (if %%x lss 6 set dm=)
- call :drv_z
- exit /b
- :计算出可用盘符
- :drv_z
- set drvs=
- for %%x in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
- SET F=0
- for /f "tokens=2" %%c in (%temp%\part_list.txt) do (IF /i "%%x"=="%%c" set F=1)
- if "!f!"=="0" set drvs=%%x,!drvs!
- )
- echo 可用盘符:!drvs!
- exit /b
- :结束
- :x
复制代码
|
评分
-
查看全部评分
|