无忧启动论坛

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

[08年11月3日更新,再更新就是适用于VISTA下了]新版解决盘符错乱批处理

[复制链接]
跳转到指定楼层
1#
发表于 2008-10-11 23:18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只要有热心朋友的参与,这个脚本肯定会做到最好!BEST GOING......
==
在此感谢MSFN论坛的JACLAZ和CN-DOS的顶级批处理高手的指点!

本次更新,在XP系统下,接近最终更新了。
代码优化,执行效率更高,对于盘符顺序正确的盘,不再删除盘符。

不论多少硬盘,多少虚拟盘,多少USB盘,多少光盘,此程序都会正确排列盘符顺序的。

本程序就是用于解决盘符错乱的,运行于NT系统,暂不适用于VISTA系统(因为VISTA下的DISKPART命令与XP不同)。无论是启动PE盘符错乱,还是使用USB盘安装XP使盘符错乱,运行一下此批处理,都正常了。

1:运行本程序,请将其放到系统盘运行;
2:运行此程序时,请关闭非系统盘打开的任何程序及文件,如果有安装到非系统盘的程序,则由于重排盘符,如果原来盘符就错乱的话,则有可能使程序指向出错,此种情况建议不要运行此程序。
3:在PE下运行此程序,请将其和这几个工具find.exe(有的PE竟然连这个也给精简了), fsutil, mountvol, diskpart,findstr.exe放到一块运行,这几个程序可以从XP系统的windows\system32目录获得。
本程序不会弄丢你的任何东西,如果运行失败,可以通过磁盘管理手动添加更改盘符。
MSFN英文讨论及链接:http://www.msfn.org/board/compatible-batch-file-o-t124539.html

  1. ::created by VICTOR888, thanks to jaclaz in MSFN forum and batch experts in cn-dos forum
  2. ::revised on Nov 3, 2008
  3. ::ordering drive letters by drive type
  4. ::ordered drive letters are assigned to fixed disk, cdrom, usb hard disk and usb stick
  5. SETLOCAL ENABLEEXTENSIONS
  6. SETLOCAL ENABLEDELAYEDEXPANSION
  7. ::get usbdisk amount
  8. set /a usbdiskam=0
  9. for /f %%a in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum /s ^| find "USBSTOR"') do (
  10.   set /a usbdiskam=!usbdiskam!+1
  11. )
  12. ::get removable usb disk amount and their drive letters
  13. set /a remusbam=0
  14. FOR /F "tokens=*" %%a in ('fsutil fsinfo drives ^| FIND /V ""') DO (
  15.   set dr=%%a
  16.   SET dr=!dr:~-5,1!
  17.   IF !dr! GTR A (
  18.     FOR /F "tokens=1,2 delims=-" %%b IN ('fsutil fsinfo drivetype !dr!:') DO (
  19.       set cr=%%c
  20.       set cr=!cr:~1,2!
  21.       if "!cr!" equ "CD" (
  22.         SET vname=%%b
  23.         SET vname=!vname:~0,1!
  24.         for /f %%x in ('mountvol !vname!: /l ^| find "\"') do call set dvdrom=%%dvdrom%% %%vname%%
  25.       )
  26.       if "!cr!" equ "可移" (
  27.         set /a remusbam=!remusbam!+1
  28.         SET vname=%%b
  29.         SET vname=!vname:~0,1!
  30.         call set remusb=%%remusb%% %%vname%%
  31.       )
  32.     )
  33.   )
  34. )
  35. ::get fixed usb disk amount
  36. if %usbdiskam% GTR 0 (
  37.   set /a fixedusbam=%usbdiskam%-%remusbam%
  38. ) else (
  39.   set /a fixedusbam=0
  40. )
  41. ::get total hard disks amount
  42. set /a totalhdam=0
  43. for /f "skip=9 tokens=2" %%a in ('echo list disk ^| diskpart.exe') do (
  44.   set /a totalhdam=!totalhdam!+1
  45. )
  46. ::get innternal fixed hard disk amount
  47. set /a fixedhdam=%totalhdam%-%fixedusbam%
  48. ::get internal hard disk drive letters and fixed usb drive letters
  49. if %fixedusbam% equ 0 (
  50.   for /f "skip=9 tokens=2" %%a in ('echo list disk ^| diskpart.exe') do (
  51.     echo select disk %%a >selectdisk%%a.txt
  52.     echo detail disk >>selectdisk%%a.txt
  53.     for /f "tokens=3 skip=17" %%b in ('diskpart /s selectdisk%%a.txt') do (
  54.       set dr=%%b
  55.       call set fixdrv=%%fixdrv%% %%dr%%
  56.     )
  57.   del selectdisk%%a.txt
  58.   )
  59.   ) else (
  60.   for /f "tokens=1 delims=" %%a in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum /v 0 ^| find "REG_SZ"') do set hd=%%a
  61.   if "%hd:~-7%" neq "USBSTOR" (
  62.     for /f "skip=9 tokens=2" %%a in ('echo list disk ^| diskpart.exe') do (
  63.       set /a counter=!counter!+1
  64.       echo select disk %%a >selectdisk%%a.txt
  65.       echo detail disk >>selectdisk%%a.txt
  66.       if !counter! LEQ %fixedhdam% (
  67.         for /f "tokens=3 skip=17" %%b in ('diskpart /s selectdisk%%a.txt') do (
  68.           set dr=%%b
  69.           call set fixdrv=%%fixdrv%% %%dr%%
  70.           del selectdisk%%a.txt
  71.         )
  72.         ) else (
  73.         for /f "tokens=3 skip=17" %%b in ('diskpart /s selectdisk%%a.txt') do (
  74.           set dr=%%b
  75.           call set hdusb=%%hdusb%% %%dr%%
  76.           del selectdisk%%a.txt
  77.         )
  78.       )
  79.     )
  80.     ) else (
  81.     echo select disk 0 >selectdisk0.txt
  82.     echo detail disk >>selectdisk0.txt
  83.     for /f "tokens=3 skip=17" %%b in ('diskpart /s selectdisk0.txt') do (
  84.       set dr=%%b
  85.       call set hdusb=%%hdusb%% %%dr%%
  86.       del selectdisk0.txt
  87.     )
  88.     for /f "skip=10 tokens=2" %%a in ('echo list disk ^| diskpart.exe') do (
  89.       set /a counter=!counter!+1
  90.       echo select disk %%a >selectdisk%%a.txt
  91.       echo detail disk >>selectdisk%%a.txt
  92.       if !counter! LEQ %fixedhdam% (
  93.         for /f "tokens=3 skip=17" %%b in ('diskpart /s selectdisk%%a.txt') do (
  94.           set dr=%%b
  95.           call set fixdrv=%%fixdrv%% %%dr%%
  96.           del selectdisk%%a.txt
  97.         )
  98.         ) else (
  99.         for /f "tokens=3 skip=17" %%b in ('diskpart /s selectdisk%%a.txt') do (
  100.           set dr=%%b
  101.           call set hdusb=%%hdusb%% %%dr%%
  102.           del selectdisk%%a.txt
  103.         )
  104.       )
  105.     )
  106.   )
  107. )
  108. ::get all drive letters except A
  109. FOR /F "tokens=*" %%b in ('fsutil fsinfo drives ^| FIND /V ""') DO (
  110.     set dr=%%b
  111.     SET dr=!dr:~-5,1!
  112.     IF !dr! GTR B call set alldrv=%%alldrv%% %%dr%%
  113. )
  114. ::get drive letters with mount point
  115. FOR /F %%a in ('mountvol ^| findstr :\') do (
  116.   set dr=%%a
  117.   set dr=!dr:~0,1!
  118.   IF !dr! GTR A call set mountdrv=%%mountdrv%% %%dr:~0,1%%
  119.   )
  120. )
  121. ::get virtual drives created by virtual CD soft, command subst, net use and ram disk etc.
  122. set virdrv=%alldrv%
  123. for %%a in (%mountdrv%) do call set virdrv=%%virdrv:%%a=%%
  124. set virdrv=%virdrv% %systemdrive:~0,1%
  125. ::ordering drive letters by internal fixed hard disk, cdrom, hard usb disk and removalbe usbdisk
  126. set neworder=%fixdrv% %dvdrom% %hdusb% %remusb%
  127. call set neworder=%%neworder:%systemdrive:~0,1%=%%
  128. set fulldrv=CDEFGHIJKLMNOPQRSTUVWXYZ
  129. for %%a in (%virdrv%) do call set fulldrv=%%fulldrv:%%a=%%
  130. :: get ordered vid
  131. set /a n=0
  132. for %%a in (%neworder%) do (
  133.   call :done %%a %%fulldrv:~!n!,1%%  
  134.   set /a n+=1  
  135. )
  136. if exist "c.txt" (
  137.   for /f "tokens=1,2 delims= " %%a in (c.txt) do mountvol %%b %%a
  138.   del c.txt
  139. )
  140. goto :eof
  141. :done
  142. if %1 neq %2 (
  143.   for /f %%b in ('mountvol %1: /l') do echo %%b %2: >>c.txt
  144.   mountvol %1: /d
  145. )
  146. goto :eof
复制代码


[ 本帖最后由 victor888 于 2008-11-3 14:31 编辑 ]

orderdrv4.rar

1.48 KB, 下载次数: 276, 下载积分: 无忧币 -2

2#
 楼主| 发表于 2008-10-11 23:20:55 | 只看该作者
虽然经本人充分测试,但也不排除有BUG的可能,请话请好好说,这个程序不会丢你东西的。
回复

使用道具 举报

3#
发表于 2008-10-11 23:24:06 | 只看该作者
find 不能运行
运行以后没有反映
find /?
也调不出来帮助
回复

使用道具 举报

4#
发表于 2008-10-11 23:26:21 | 只看该作者
谢谢分享,先下载用用。
回复

使用道具 举报

5#
发表于 2008-10-11 23:29:14 | 只看该作者
是diskpart,不是dikpart。
回复

使用道具 举报

6#
发表于 2008-10-12 01:54:16 | 只看该作者
支持,希望盘符问题能就此解决,下载学习。。。
回复

使用道具 举报

7#
发表于 2008-10-12 02:05:35 | 只看该作者
顶一个先,下载来试试看效果如何。
回复

使用道具 举报

8#
 楼主| 发表于 2008-10-12 07:57:07 | 只看该作者
原帖由 amei 于 2008-10-11 23:24 发表
find 不能运行
运行以后没有反映
find /?
也调不出来帮助


那是你系统的问题。
回复

使用道具 举报

9#
发表于 2008-10-12 08:19:24 | 只看该作者
希望移动硬盘的这个也能够解决。去试试看啦。呵呵。
回复

使用道具 举报

10#
 楼主| 发表于 2008-10-12 08:36:33 | 只看该作者
原帖由 qusibago 于 2008-10-12 08:19 发表
希望移动硬盘的这个也能够解决。去试试看啦。呵呵。


这是肯定的,我测试时使用了数码伴侣,移动硬盘、可移动盘、虚拟盘,全考虑到了。
回复

使用道具 举报

11#
发表于 2008-10-12 08:39:39 | 只看该作者
呵呵,好东东,顶个。
回复

使用道具 举报

12#
发表于 2008-10-12 08:40:32 | 只看该作者
暂时没有遇到类似问题,先关注一下。
回复

使用道具 举报

13#
发表于 2008-10-12 09:37:21 | 只看该作者
通篇读下来。有些命令不是很懂。特别是FOR命令和涉及注册表的东西。
有谁能解析一下?
回复

使用道具 举报

14#
发表于 2008-10-12 09:40:07 | 只看该作者
关注中。。
对或者经常给人装机的人,应是有用的。
回复

使用道具 举报

15#
发表于 2008-10-12 09:48:42 | 只看该作者
原帖由 amei 于 2008-10-11 23:24 发表
find 不能运行
运行以后没有反映
find /?
也调不出来帮助

PE上的DOS版本是多少?
回复

使用道具 举报

16#
发表于 2008-10-12 10:26:45 | 只看该作者
收下备用,感谢分享!
回复

使用道具 举报

17#
发表于 2008-10-12 12:06:37 | 只看该作者
偶的移动硬盘盘符修改不了。
期待解决办法,。
回复

使用道具 举报

18#
发表于 2008-10-12 12:12:23 | 只看该作者
不管怎样说楼主也辛苦了,感谢分享,下载试用!
回复

使用道具 举报

19#
发表于 2008-10-12 13:56:44 | 只看该作者
使用PE等。。

有时会盘符错乱。。。

试试。。

LZ辛苦。啦。
回复

使用道具 举报

20#
发表于 2008-10-12 15:01:27 | 只看该作者
这样会拖慢启动速度吧
回复

使用道具 举报

21#
发表于 2008-10-12 16:09:51 | 只看该作者
谢谢LZ的辛苦劳动!!!!!!!!!
回复

使用道具 举报

22#
发表于 2008-10-12 17:37:01 | 只看该作者
这个程序太好了,补充一下,有的PE里没有 findstr.exe ,执行后,光驱会不见了,
回复

使用道具 举报

23#
 楼主| 发表于 2008-10-12 17:58:28 | 只看该作者
原帖由 网虫2008 于 2008-10-12 17:37 发表
这个程序太好了,补充一下,有的PE里没有 findstr.exe ,执行后,光驱会不见了,


对,那就也加上。
回复

使用道具 举报

24#
发表于 2008-10-12 20:34:34 | 只看该作者
谢谢V大,下载试用.
回复

使用道具 举报

25#
发表于 2008-10-12 21:14:33 | 只看该作者
好东西,谢谢,以收藏了。。
回复

使用道具 举报

26#
发表于 2008-10-12 23:23:55 | 只看该作者
下载试用了,确实不错。
回复

使用道具 举报

27#
发表于 2008-10-12 23:29:11 | 只看该作者
盘符问题能就此解决,下载学习了!
回复

使用道具 举报

28#
发表于 2008-10-13 00:35:27 | 只看该作者
谢谢斑竹的好东西,经常使用移动硬盘进入PE给人重装系统,一直没办法解决盘符的问题,谢谢你!

另外你提到“再也不用怕PE下安装系统出现盘符问题了(顺注:这种安装方法早已经落后)”,想问问除了PE下安装系统,还有什么更好的安装方法,麻烦指教一下!
回复

使用道具 举报

29#
 楼主| 发表于 2008-10-13 08:08:13 | 只看该作者
一个是USB盘直接安装,看我的贴子;另外一个是从硬盘启动到微型PE,再从U盘安装,省时省力,且不存在启动问题,这个去www.msfn.org/board到install xp from usb查看。
回复

使用道具 举报

30#
发表于 2008-10-13 09:24:58 | 只看该作者
好东东,收藏先
感谢分享!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-3-5 03:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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