[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] [已解决]批处理更改可移动磁盘两个相邻分区的盘符

在网上找到两段代码 可以更改当前盘盘符为X

如何修改能同时更改后一个盘的盘符
比如把D改成X后 把E改成Y
请各位大侠帮忙

[ 本帖最后由 z5653821 于 2009-11-11 11:42 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 1楼 的帖子

这个操作具有一定的危险性,请谨慎,最好在虚拟机上先试
  1. @echo off&setlocal enabledelayedexpansion
  2. set temp_=#XYZABDEFGHIJKLMNOPQRSTUVW
  3. rem 你要修改的顺序,C盘除外
  4. pushd %windir%\system32\
  5. for /f "skip=2 tokens=1 delims=:" %%a in ('wmic logicaldisk get name') do set /a n+=1&call :sub %%a !n!
  6. pause
  7. :sub
  8. set temp__=!temp_:%1=!
  9. echo.最终替换结果:
  10. echo %1: —→ !temp__:~%2,1!:
  11. for /f "delims=" %%a in ('mountvol %1: /l') do (
  12. mountvol %1: /d
  13. mountvol !temp__:~%2,1!: %%a
  14. )
  15. goto :eof
复制代码

[ 本帖最后由 lxzzr 于 2009-11-1 11:35 编辑 ]

TOP

初来乍到就见到老大出手 呵呵 激动啊

TOP

重新测试了一下
版主可能误解了我的意思

我希望的结果是:更改当前盘和当前盘后一个盘的盘符
如我的移动硬盘插上之后是 G和H 当然不同机器上盘符也不同,只是举个例子

能不能有劳版主稍加修改 把当前盘【可能是G也可能是其他盘符】和紧接着的盘符【比如是H】
分别修改为X盘和Y盘

  1. @ echo off
  2. rem 功能重新分配当前的盘符至固定盘符
  3. title 盘符重新分配
  4. cls
  5. if /i "%oldvol%"=="c:\" echo.&&echo 不能更改系统盘盘符?&&goto end
  6. del allyesno.txt>nul 2>nul
  7. rem 输出所有盘符信息至allyesno.txt文件
  8. mountvol/l>>allyesno.txt
  9. setlocal enabledelayedexpansion
  10. rem 查找当前盘符
  11. rem for %%i in (%cd%) do set oldvol=%%~di\
  12. rem 查找当前盘符对应的序列号
  13. set num=0
  14. for /f %%i in (allyesno.txt) do (
  15. set/a num+=1
  16. set allyesno=%%i
  17. if "!allyesno!"=="%oldvol%" set oldvolnum=!num!
  18. )
  19. rem 计算当前盘符VolumeName值对应的序列号
  20. set/a oldvolnamenum=!oldvolnum!-1
  21. rem 查找当前盘符VolumeName值
  22. set num=0
  23. for /f %%i in (allyesno.txt) do (
  24. set/a num+=1
  25. set allyesno=%%i
  26. if "!num!"=="!oldvolnamenum!" set oldvolname=!allyesno!
  27. )
  28. rem 删除当前盘符
  29. mountvol !oldvol! /d
  30. rem 重新分配盘符为X:
  31. mountvol x: !oldvolname!
复制代码

[ 本帖最后由 z5653821 于 2009-11-2 18:30 编辑 ]

TOP

在上面的代码里面 已经得到当前盘盘符是 oldvol
那下面一个盘符应该是 oldvol+1之类的 【本人不懂bat 不知道语法格式】
有没有人能帮下忙

TOP

只能修改两个临近的盘,比如当前盘为D盘,临近的后一个盘是E盘。把D盘改为X盘,E盘改为Y盘。
  1. @echo off
  2. set newvol1=X
  3. set newvol2=Y
  4. set  /p currvol=请输入想要修改的盘符(输入格式:D):
  5. for /f "delims=" %%i in ('mountvol %currvol%: /l') do set volname=%%i
  6. mountvol %currvol%: /d
  7. mountvol %newvol1%: %volname%
  8. set str=C D E F G H I J K L M N O P Q R S T U V W X Y Z
  9. for %%j in (%str%) do (
  10.     set /a n+=1
  11.     if %%j==%currvol% goto next
  12. )
  13. :next
  14. setlocal enabledelayedexpansion
  15. set string=%str: =%
  16. set nextvol=!string:~%n%,1!
  17. for /f "delims=" %%a in ('mountvol %nextvol%: /l') do set nextvolname=%%a
  18. mountvol %nextvol%: /d
  19. mountvol %newvol2%: %nextvolname%
复制代码

[ 本帖最后由 keen 于 2009-11-2 20:58 编辑 ]
(*^_^*)

TOP

代码不要放在要修改的盘!!!(代码会先“卸载”掉当前的盘)

TOP

回复 7楼 的帖子

没敢测试,所以考虑不周全,谢lxzzr兄指正,那就修改一下,变成让用户输入盘符。
(*^_^*)

TOP

回复 8楼 的帖子

我开始也没仔细去想,现在把我的盘符搞得乱七八糟的,呵呵

这样应该好了:
将代码放在要修改的第一个盘里执行
  1. @echo off&setlocal enabledelayedexpansion
  2. set temp_=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  3. for /l %%a in (0,1,26) do if "!temp_:~%%a,1!" == "%cd:~0,1%" (set /a temp__=%%a+1)
  4. if /i "%cd:~0,1%" == "C" (
  5.         for /f "tokens=1,2 delims=," %%a in (temp) do (
  6.         for /f "delims=" %%i in ('mountvol %%a /l') do mountvol %%a /d&mountvol X: %%i
  7.         for /f "delims=" %%j in ('mountvol %%b /l') do mountvol %%b /d&mountvol Y: %%j
  8.         )
  9.         erase temp,%~nx0&(echo.Done.&pause>nul)&goto :loop
  10.         ) else (
  11.         echo.当前:%cd:~0,1%:→X:,下一个:!temp_:~%temp__%,1!:→Y:
  12.         echo.%cd:~0,1%:,!temp_:~%temp__%,1!:>c:\temp
  13.         copy %0 c:\>nul&pushd c:&%~nx0
  14. )
  15. :loop
复制代码

[ 本帖最后由 lxzzr 于 2009-11-2 21:21 编辑 ]

TOP

回复 6楼 的帖子

请教KEEN一个问题

【rem 删除当前盘符
mountvol !oldvol! /d
rem 重新分配盘符为X:
mountvol x: !oldvolname!】

如果已经知道 当前盘的盘符是oldvol  在bat里面 怎样把后面临近的一个盘表示出来
是不是: oldvol=oldvol+1 ?
只要能表示 只要在上面两行的基础上再加两行就可以了
因为移动硬盘的分区名称是已知的 我可以随意修改

TOP

回复 9楼 的帖子

多谢版主 我再试试看

TOP

回复 10楼 的帖子

你应该将问题改为:批处理修改可移动磁盘盘符。^_^

TOP

回复 12楼 的帖子

呵呵 我马上改下 不过
很遗憾,你的代码还是没有成功啊

TOP

回复 13楼 的帖子

汗!我插上我的手机(两个盘符),是可以的啊????

TOP

回复 14楼 的帖子

..............啥情况啊 我放在g盘测试的 我在cmd里看下运行结果 =下哈。



G:\>G:\a.cmd
当前:G:→X:,下一个:H:→Y:
'a.cmd' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

[ 本帖最后由 z5653821 于 2009-11-2 21:47 编辑 ]

TOP

返回列表