无忧启动论坛

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

[原创] 更改分区盘符的批处理

[复制链接]
跳转到指定楼层
#
发表于 2022-7-10 03:18:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 linqyx 于 2023-9-4 18:23 编辑

更好的作品请看 dos时代菜鸟在 11楼、17楼、20楼和26楼 作者的作品,我这个是自己练习弄着玩的,简陋。

功能很单一,方便更改某一分区的盘符。
注意:千万不要更改系统盘符!千万不要更改系统盘符!千万不要更改系统盘符!
两个文件区别:
更改分区盘符操作简单,退出不删除c:盘目录下的 更改分区盘符.bat文件,盘符已经存在的话不提示直接退出。

更改分区盘符v1.0

相对另一个操作比较繁琐,除非鼠标x掉批处理,批处理自行退出会自己删掉 更改分区盘符.bat文件,如果盘符已经存在会提示重新输入。



更改分区盘符.zip

1.16 KB, 下载次数: 109, 下载积分: 无忧币 -2

更改分区盘符v1.0.zip

1.12 KB, 下载次数: 97, 下载积分: 无忧币 -2

更新一些功能,但是比较繁琐

32#
发表于 2024-4-28 16:12:37 | 只看该作者
谢谢分享
回复

使用道具 举报

31#
发表于 2023-9-12 10:21:45 | 只看该作者

谢谢分享
回复

使用道具 举报

30#
 楼主| 发表于 2023-9-5 21:38:05 | 只看该作者
wfg1555 发表于 2023-7-29 23:20
有些时候安装系统,就乱了。

安装系统最莽的做法就是不分三七二十一,直接安装C盘。一般是要在分区中先看所选择系统分区的盘符,再把系统安装到对应的盘符。更稳妥的是,安装系统的时候看一下选择的分区的盘符和大小是不是和目标分区相符。
回复

使用道具 举报

29#
发表于 2023-9-5 10:38:54 | 只看该作者

谢谢分享!!!!
回复

使用道具 举报

28#
发表于 2023-9-4 16:21:58 | 只看该作者
谢谢分享
回复

使用道具 举报

27#
发表于 2023-7-29 23:20:20 | 只看该作者
有些时候安装系统,就乱了。

点评

安装系统最莽的做法就是不分三七二十一,直接安装C盘。一般是要在分区中先看所选择系统分区的盘符,再把系统安装到对应的盘符。更稳妥的是,安装系统的时候看一下选择的分区的盘符和大小是不是和目标分区相符。  详情 回复 发表于 2023-9-5 21:38
回复

使用道具 举报

26#
发表于 2023-7-29 10:50:58 | 只看该作者
真不错。感谢。
回复

使用道具 举报

25#
发表于 2023-7-29 09:45:27 | 只看该作者
本帖最后由 dos时代菜鸟 于 2023-7-29 09:54 编辑

原来 win10 没有 "fsutil volume querylabel" 这个命令了
取而代之的是 "fsutil fsinfo volumeinfo"

m3.7z (1.38 KB, 下载次数: 12)

用 fsutil 可以显示没有盘符的分区卷对应的卷标,这样操作起来更有针对性一些。



回复

使用道具 举报

24#
发表于 2023-7-28 22:23:36 | 只看该作者

谢谢分享。
回复

使用道具 举报

23#
发表于 2022-10-24 20:24:30 来自手机 | 只看该作者
有用
回复

使用道具 举报

22#
发表于 2022-10-24 11:49:26 | 只看该作者

感謝樓主分享
回复

使用道具 举报

21#
发表于 2022-7-14 15:55:05 | 只看该作者
感謝樓主分享
回复

使用道具 举报

20#
发表于 2022-7-14 13:24:34 来自手机 | 只看该作者
感谢分享!!
回复

使用道具 举报

19#
发表于 2022-7-12 09:09:45 | 只看该作者
关于编码 代码页 的问题
win10 下

可以 用
  1. mode con: cp select=65001
复制代码

把代码页设置为 utf-8

批处理文件 另存为 utf-8 编码,文件

运行时 ,就能完美支持中文 utf-8
回复

使用道具 举报

18#
 楼主| 发表于 2022-7-11 20:16:42 | 只看该作者
481416322 发表于 2022-7-11 17:30
看了半天才知道谁是真正的楼主

楼主是菜鸟
回复

使用道具 举报

17#
发表于 2022-7-11 19:32:48 | 只看该作者
linqyx 发表于 2022-7-11 16:50
谢谢,学习了。

这个 批处理有瑕疵
回复

使用道具 举报

16#
发表于 2022-7-11 19:25:00 | 只看该作者
本帖最后由 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)


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title MOUNTVOL 盘符装卸脚本
  4. :main
  5. chcp 437
  6. set n=0
  7. set ltr_s=
  8. for /f "delims=" %%c in ('fsutil volume list') do (
  9.     set str1=%%c
  10.     rem 对字符串去空格处理
  11.     set str1=!str1: =!
  12.    
  13.     if defined m ( rem 如果定义了 变量m 说明上一条字符串 是一个卷内容,且本行字符串 是该卷对应的盘符
  14.         if "!str1:~1,1!"==":" ( rem 如果本行字符串第二个字符是 : 说明 是一个有效的盘符
  15.             set ltr=!str1:~0,2!
  16.                 rem 把 盘符存入 变量 ltr_s 中
  17.             set "ltr_s=!ltr_s! !str1:~0,1!"
  18.         ) else (
  19.             set "ltr=*:"
  20.         )
  21.         
  22.         for /f "tokens=6 delims= " %%u in ('fsutil volume querylabel !vol!') do (set label=%%u)

  23.         rem 设置包含序号的 vol 变量内容,如 vol1 vol2 vol3 vol4 .......
  24.         set vol!n!=!m:~-2!.   !ltr!   !vol!     !label!
  25.         set m=
  26.         set vol=
  27.     )
  28.     if "!str1:~0,1!"=="" (  rem 如果本行字符串第一个字符 是 \ 说明是 个卷,把改行信息出入 vol 变量并设置 m 变量
  29.         set /a n=!n!+1
  30.         set m= !n!
  31.         set vol=!str1!
  32.     )
  33. )
  34. chcp 936
  35. cls
  36. echo MOUNTVOL 盘符装卸脚本
  37. echo 序号--盘符-----卷------------------------------------------------卷标-----
  38. for /l %%c in (1,1,!n!) do (echo !vol%%c!)

  39. echo ----------------------------------------
  40. echo 已占用盘符!ltr_s!
  41. 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
  42. for %%c in (!ltr_s!) DO (  set ltr0=!ltr0: %%c=!)
  43. echo 空闲盘符  !ltr0!
  44. echo ----------------------------------------
  45. set x=0
  46. set /p x="请选择一个要操作的卷(1-!n!,默认输入0退出):_"
  47. echo ----------------------------------------
  48. if !x!==0 goto :eof
  49. for %%c in (!x!) do (
  50.     if defined vol%%c (
  51.         for /f  "tokens=1,2,3 delims= " %%x in ('echo !vol%%c!') do (
  52.             echo ------------------------------------
  53.             echo 你选择了 %%x
  54.             echo 对应盘符 %%y
  55.             echo 对应卷是 %%z
  56.             echo ------------------------------------
  57.             rem 以下内容对卷进行 盘符装卸操作
  58.             if /i "%%y"=="%systemdrive%" (
  59.                 echo 系统所在卷,盘符不可更改。
  60.                 pause
  61.                 goto :end1
  62.             )            
  63.             set ltr_x=
  64.             set /p ltr_x="请输入一个新盘符(输入0卸载该卷盘符):_"
  65.             if !ltr_x!==0 (
  66.                 if not "%%y"=="*:" (
  67.                     mountvol %%y\ /d
  68.                 ) else (
  69.                     echo 没有盘符,不需要卸载.
  70.                     pause
  71.                 )
  72.             ) else (
  73.                 set find=0
  74.                 for %%r in (!ltr0!) do (
  75.                     if /i "%%r"=="!ltr_x!" (set "find=1")
  76.                 )
  77.                 if !find!==1 (
  78.                     if not "%%y"=="*:" (mountvol %%y\ /d)
  79.                     mountvol !ltr_x!:\ %%z
  80.                 ) else (
  81.                     echo 盘符输入错误,不是空闲盘符。
  82.                     pause
  83.                 )
  84.             )
  85.         )
  86.     ) else (
  87.         echo 输入错误,重新来过.
  88.         pause
  89.     )
  90. )
  91. :end1
  92. goto :main
复制代码




点评

懒惰被人唾弃,勤奋让人钦佩  发表于 2022-7-12 04:17
回复

使用道具 举报

15#
发表于 2022-7-11 19:16:39 | 只看该作者
aichong168 发表于 2022-7-10 15:48
我一般用系统自带的磁盘管理功能区修改

我通常用自制 diskpart 图形界面脚本 完成。
回复

使用道具 举报

14#
发表于 2022-7-11 19:15:32 | 只看该作者
linqyx 发表于 2022-7-11 17:17
不仅学习了知识,写批处理的格式也学习了。以前看到的批处理基本都是从每行行首开始,不知怎么缩进。现在 ...

python 习惯了
回复

使用道具 举报

13#
发表于 2022-7-11 17:30:12 | 只看该作者

看了半天才知道谁是真正的楼主

点评

楼主是菜鸟  详情 回复 发表于 2022-7-11 20:16
回复

使用道具 举报

12#
 楼主| 发表于 2022-7-11 17:17:53 | 只看该作者

不仅学习了知识,写批处理的格式也学习了。以前看到的批处理基本都是从每行行首开始,不知怎么缩进。现在感觉以前写出来的东西都乱糟糟的。

点评

python 习惯了  详情 回复 发表于 2022-7-11 19:15
回复

使用道具 举报

11#
 楼主| 发表于 2022-7-11 16:50:25 | 只看该作者

谢谢,学习了。

点评

这个 批处理有瑕疵  详情 回复 发表于 2022-7-11 19:32
回复

使用道具 举报

10#
发表于 2022-7-11 10:01:47 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-7-11 19:32 编辑

仅供参考

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title MOUNTVOL 盘符装卸脚本
  4. :main
  5. cls
  6. echo MOUNTVOL 盘符装卸脚本
  7. echo 序号--盘符-----卷-------------------------------------------------
  8. set n=0
  9. set ltr_s=
  10. for /f "delims=" %%c in ('mountvol /l') do (
  11.     set str1=%%c
  12.     rem 对字符串去空格处理
  13.     set str1=!str1: =!
  14.    
  15.     if defined m ( rem 如果定义了 变量m 说明上一条字符串 是一个卷内容,且本行字符串 是该卷对应的盘符
  16.         if "!str1:~1,1!"==":" ( rem 如果本行字符串第二个字符是 : 说明 是一个有效的盘符
  17.             set ltr=!str1:~0,2!
  18.                 rem 把 盘符存入 变量 ltr_s 中
  19.             set "ltr_s=!ltr_s! !str1:~0,1!"
  20.         ) else (
  21.             set "ltr=*:"
  22.         )
  23.         echo !m:~-2!.    !ltr!      !vol!
  24.         rem 设置包含序号的 vol 变量内容,如 vol1 vol2 vol3 vol4 .......
  25.         set vol!n!=!m:~-2!.   !ltr!   !vol!
  26.         set m=
  27.         set vol=
  28.     )
  29.     if "!str1:~0,1!"=="" (  rem 如果本行字符串第一个字符 是 \ 说明是 个卷,把改行信息出入 vol 变量并设置 m 变量
  30.         set /a n=!n!+1
  31.         set m= !n!
  32.         set vol=!str1!
  33.     )
  34. )
  35. echo ----------------------------------------
  36. echo 已占用盘符!ltr_s!
  37. 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
  38. for %%c in (!ltr_s!) DO (  set ltr0=!ltr0: %%c=!)
  39. echo 空闲盘符   !ltr0!
  40. echo ----------------------------------------
  41. set x=0
  42. set /p x="请选择一个要操作的卷(1-!n!,默认输入0退出):_"
  43. echo ----------------------------------------
  44. if !x!==0 goto :eof
  45. for %%c in (!x!) do (
  46.     if defined vol%%c (
  47.         for /f  "tokens=1,2* delims= " %%x in ('echo !vol%%c!') do (
  48.             echo ------------------------------------
  49.             echo 你选择了 %%x
  50.             echo 对应盘符 %%y
  51.             echo 对应卷是 %%z
  52.             echo ------------------------------------
  53.             rem 以下内容对卷进行 盘符装卸操作
  54.             if /i "%%y"=="%systemdrive%" (
  55.                 echo 系统所在卷,盘符不可更改。
  56.                 pause
  57.                 goto :end1
  58.             )            
  59.             set ltr_x=
  60.             set /p ltr_x="请输入一个新盘符(输入0卸载该卷盘符):_"
  61.             if !ltr_x!==0 (
  62.                 if not "%%y"=="*:" (
  63.                     mountvol %%y\ /d
  64.                 ) else (
  65.                     echo 没有盘符,不需要卸载.
  66.                     pause
  67.                 )
  68.             ) else (
  69.                 set find=0
  70.                 for %%r in (!ltr0!) do (
  71.                     if /i "%%r"=="!ltr_x!" (set "find=1")
  72.                 )
  73.                 if !find!==1 (
  74.                     if not "%%y"=="*:" (mountvol %%y\ /d)
  75.                     mountvol !ltr_x!:\ %%z
  76.                 ) else (
  77.                     echo 盘符输入错误,不是空闲盘符。
  78.                     pause
  79.                 )
  80.             )
  81.         )
  82.     ) else (
  83.         echo 输入错误,重新来过.
  84.         pause
  85.     )
  86. )
  87. :end1
  88. goto :main
复制代码





mount2.PNG (25.08 KB, 下载次数: 259)

mount2.PNG

mount1.PNG (27.64 KB, 下载次数: 261)

mount1.PNG

点评

看了半天才知道谁是真正的楼主  详情 回复 发表于 2022-7-11 17:30
不仅学习了知识,写批处理的格式也学习了。以前看到的批处理基本都是从每行行首开始,不知怎么缩进。现在感觉以前写出来的东西都乱糟糟的。  详情 回复 发表于 2022-7-11 17:17
谢谢,学习了。  详情 回复 发表于 2022-7-11 16:50
回复

使用道具 举报

9#
发表于 2022-7-11 08:12:44 | 只看该作者
linqyx 发表于 2022-7-11 01:02
@echo off
mode con cols=40 lines=20
setlocal enabledelayedexpansion

仅供参考

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :main
  4. cls
  5. echo -------卷列表----------
  6. set n=0
  7. set ltr_s=
  8. for /f "delims=" %%c in ('mountvol') do (
  9.     set str1=%%c
  10.       rem 对字符串去空格处理
  11.     set str1=!str1: =!
  12.    
  13.     if defined m ( rem 如果定义了 变量m 说明上一条字符串 是一个卷内容,且本行字符串 是该卷对应的盘符
  14.         if "!str1:~1,1!"==":" ( rem 如果本行字符串第二个字符是 : 说明 是一个有效的盘符
  15.             set ltr=!str1:~0,2!
  16.                 rem 把 盘符存入 变量 ltr_s 中
  17.             set "ltr_s=!ltr_s! !str1:~0,2!"
  18.         ) else (
  19.             set ltr=
  20.         )
  21.         echo !m:~-2!.   !vol!   !ltr!
  22.             rem 设置包含序号的 vol 变量内容,如 vol1 vol2 vol3 vol4 .......
  23.         set vol!n!=!m:~-2!.   !vol!   !ltr!
  24.         set m=
  25.         set vol=
  26.     )
  27.     if "!str1:~0,1!"=="" (  rem 如果本行字符串第一个字符 是 \ 说明是 个卷,把改行信息出入 vol 变量并设置 m 变量
  28.         set /a n=!n!+1
  29.         set m= !n!
  30.         set vol=!str1!
  31.     )
  32. )
  33. echo 已占用盘符:!ltr_s!
  34. set /p x="请选择一个要操作的卷:(1-!n!,输入0退出)"
  35. if !x!==0 goto :eof
  36. for %%c in (!x!) do (
  37.     if defined vol%%c (
  38.         for /f  "tokens=1,2* delims= " %%x in ('echo !vol%%c!') do (
  39.             echo ------------------------------------
  40.             echo 你选择了 %%x
  41.             echo 对应卷是 %%y
  42.             echo 对应盘符 "%%z"
  43.             echo ------------------------------------
  44.         )
  45.     ) else (
  46.         echo 输入错误,重新来过!
  47.     )
  48. )
  49. pause
  50. goto :main
复制代码

点评

高!  发表于 2022-7-11 17:30
回复

使用道具 举报

8#
 楼主| 发表于 2022-7-11 01:02:30 | 只看该作者
本帖最后由 linqyx 于 2022-7-11 01:34 编辑
dos时代菜鸟 发表于 2022-7-10 20:16
慢慢来,不着急,

其实,用 mountvol 可以获取 卷列表和 盘符列表,你给 卷 做个编号,让用户选择 需 ...

@echo off
mode con cols=40 lines=20
setlocal enabledelayedexpansion
for /f "tokens=4 delims=. " %%i in ('ver') do set ver=%%i
if !ver! equ 5  goto :vol1
if !ver! gtr 5  goto :vol2
:vol1
for /f "skip=12 delims=" %%i in ('mountvol') do (echo %%i>>vol.txt)
goto :main
:vol2
for /f "skip=21 delims=" %%i in ('mountvol') do (echo %%i>>vol.txt)
goto :main
:main
for %%i in (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 echo %%i>>zm.txt
echo 请耐心等待,为您分配盘符即将完成
for /f %%i in (zm.txt) do (  
  for /f %%j in (vol.txt) do (
        mountvol %%i %%j >nul 2>nul
        )
    )
del /f /q vol.txt
del /f /q zm.txt
这个没有判断分区是否已经有盘符语句,执行比较慢。可以给xp win7 win10无盘符分区分配盘符,有无其他bug未知。等以后学习更多批处理知识后再来改进。

点评

仅供参考  详情 回复 发表于 2022-7-11 08:12
回复

使用道具 举报

7#
发表于 2022-7-10 20:16:56 | 只看该作者
linqyx 发表于 2022-7-10 18:40
pushd 命令可以判断输入的盘符是否已经存在。
我刚学习批处理不久,3.通常我们更需要 把 没有分配盘符的 ...

慢慢来,不着急,

其实,用 mountvol 可以获取 卷列表和 盘符列表,你给 卷 做个编号,让用户选择 需要分配盘符的 无盘符卷,就可以了。

点评

@echo off mode con cols=40 lines=20 setlocal enabledelayedexpansion for /f "tokens=4 delims=. " %%i in ('ver') do set ver=%%i if !ver! equ 5 goto :vol1 if !ver! gtr 5 goto :vol2 :vol1 for /f  详情 回复 发表于 2022-7-11 01:02
回复

使用道具 举报

6#
 楼主| 发表于 2022-7-10 18:40:23 | 只看该作者
dos时代菜鸟 发表于 2022-7-10 11:17
建议:
1.通过 mountvol 或者其他命令 获取已存在的 盘符列表 并显示出来
2.通过 已存在的 盘符列表 判断 ...

pushd 命令可以判断输入的盘符是否已经存在。
我刚学习批处理不久,3.通常我们更需要 把 没有分配盘符的卷 给分配个盘符 对我来说,比较难。

点评

慢慢来,不着急, 其实,用 mountvol 可以获取 卷列表和 盘符列表,你给 卷 做个编号,让用户选择 需要分配盘符的 无盘符卷,就可以了。  详情 回复 发表于 2022-7-10 20:16
回复

使用道具 举报

5#
发表于 2022-7-10 15:48:53 | 只看该作者
我一般用系统自带的磁盘管理功能区修改

点评

我通常用自制 diskpart 图形界面脚本 完成。  详情 回复 发表于 2022-7-11 19:16
回复

使用道具 举报

4#
发表于 2022-7-10 11:17:08 | 只看该作者
建议:
1.通过 mountvol 或者其他命令 获取已存在的 盘符列表 并显示出来
2.通过 已存在的 盘符列表 判断用户 输入是否正确
3.通常我们更需要 把 没有分配盘符的卷 给分配个盘符

点评

pushd 命令可以判断输入的盘符是否已经存在。 我刚学习批处理不久,3.通常我们更需要 把 没有分配盘符的卷 给分配个盘符 对我来说,比较难。  详情 回复 发表于 2022-7-10 18:40
回复

使用道具 举报

3#
发表于 2022-7-10 09:41:41 | 只看该作者
非常感谢楼主
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 21:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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