|
本帖最后由 dos时代菜鸟 于 2022-7-11 19:34 编辑
其实批处理 ,就是 把 分析各种文本流信息,找出自己需要的,显示出来,形成交互界面,或者自动运行。最终 达到想要的目的。
用for /f 配合 if 和 Set 就基本上可以实现 文本流信息的分析
下面这个是用 for /f + if + Set 分析 fsutil volume 指令的输出结果,获取 本地电脑各卷 盘符 和 卷标。
然后 , 根据用户所选,通过 mountvol 实现 对某个卷的 盘符装卸和更改。
因为 中文 和 英文 的文本流 不一样,所以 需要事先 用 chcp 437 把代码页 设置为 英文,需要交互界面时,再设置为 936.
m2.7z
(1.26 KB, 下载次数: 15)
- @echo off
- setlocal enabledelayedexpansion
- title MOUNTVOL 盘符装卸脚本
- :main
- chcp 437
- set n=0
- set ltr_s=
- for /f "delims=" %%c in ('fsutil volume list') do (
- set str1=%%c
- rem 对字符串去空格处理
- set str1=!str1: =!
-
- if defined m ( rem 如果定义了 变量m 说明上一条字符串 是一个卷内容,且本行字符串 是该卷对应的盘符
- if "!str1:~1,1!"==":" ( rem 如果本行字符串第二个字符是 : 说明 是一个有效的盘符
- set ltr=!str1:~0,2!
- rem 把 盘符存入 变量 ltr_s 中
- set "ltr_s=!ltr_s! !str1:~0,1!"
- ) else (
- set "ltr=*:"
- )
-
- for /f "tokens=6 delims= " %%u in ('fsutil volume querylabel !vol!') do (set label=%%u)
- rem 设置包含序号的 vol 变量内容,如 vol1 vol2 vol3 vol4 .......
- set vol!n!=!m:~-2!. !ltr! !vol! !label!
- set m=
- set vol=
- )
- if "!str1:~0,1!"=="" ( rem 如果本行字符串第一个字符 是 \ 说明是 个卷,把改行信息出入 vol 变量并设置 m 变量
- set /a n=!n!+1
- set m= !n!
- set vol=!str1!
- )
- )
- chcp 936
- cls
- echo MOUNTVOL 盘符装卸脚本
- echo 序号--盘符-----卷------------------------------------------------卷标-----
- for /l %%c in (1,1,!n!) do (echo !vol%%c!)
- echo ----------------------------------------
- echo 已占用盘符!ltr_s!
- SET ltr0= 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
- for %%c in (!ltr_s!) DO ( set ltr0=!ltr0: %%c=!)
- echo 空闲盘符 !ltr0!
- echo ----------------------------------------
- set x=0
- set /p x="请选择一个要操作的卷(1-!n!,默认输入0退出):_"
- echo ----------------------------------------
- if !x!==0 goto :eof
- for %%c in (!x!) do (
- if defined vol%%c (
- for /f "tokens=1,2,3 delims= " %%x in ('echo !vol%%c!') do (
- echo ------------------------------------
- echo 你选择了 %%x
- echo 对应盘符 %%y
- echo 对应卷是 %%z
- echo ------------------------------------
- rem 以下内容对卷进行 盘符装卸操作
- if /i "%%y"=="%systemdrive%" (
- echo 系统所在卷,盘符不可更改。
- pause
- goto :end1
- )
- set ltr_x=
- set /p ltr_x="请输入一个新盘符(输入0卸载该卷盘符):_"
- if !ltr_x!==0 (
- if not "%%y"=="*:" (
- mountvol %%y\ /d
- ) else (
- echo 没有盘符,不需要卸载.
- pause
- )
- ) else (
- set find=0
- for %%r in (!ltr0!) do (
- if /i "%%r"=="!ltr_x!" (set "find=1")
- )
- if !find!==1 (
- if not "%%y"=="*:" (mountvol %%y\ /d)
- mountvol !ltr_x!:\ %%z
- ) else (
- echo 盘符输入错误,不是空闲盘符。
- pause
- )
- )
- )
- ) else (
- echo 输入错误,重新来过.
- pause
- )
- )
- :end1
- goto :main
复制代码
|
|