无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 23850|回复: 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

94#
发表于 2008-11-20 12:56:15 | 只看该作者
期待楼主更新支持VISTA的
回复

使用道具 举报

93#
发表于 2008-11-7 15:11:28 | 只看该作者
不错,谢谢版主持续不断的更新
回复

使用道具 举报

92#
发表于 2008-11-7 08:47:38 | 只看该作者
谢谢版主发这么好的工具测试一下看看
回复

使用道具 举报

91#
发表于 2008-11-3 15:49:36 | 只看该作者
找回丢失的盘符.rar (244 Bytes, 下载次数: 69)
回复

使用道具 举报

90#
发表于 2008-11-3 15:46:28 | 只看该作者
谢谢分享,先下载了。
回复

使用道具 举报

89#
 楼主| 发表于 2008-11-3 14:30:12 | 只看该作者
原帖由 lsj0416 于 2008-11-3 13:52 发表
2003下除硬盘以外的盘符全丢,包括虚拟光驱!


好像不能用于2003,等我晚上回家测试,谢谢你的报告。
回复

使用道具 举报

88#
发表于 2008-11-3 13:52:09 | 只看该作者
2003下除硬盘以外的盘符全丢,包括虚拟光驱!
回复

使用道具 举报

87#
发表于 2008-11-3 11:33:08 | 只看该作者
很好用,就是批处理循环时间长了点。
回复

使用道具 举报

86#
 楼主| 发表于 2008-11-3 11:12:10 | 只看该作者
原帖由 lsj0416 于 2008-11-3 11:04 发表
2003行吗?上次的我测试丢盘符。我的机器装有虚拟光驱,读卡器,盘符一大堆,结果虚拟光驱丢失,读卡器盘符显示不全,试试这个!


等待你的报告。
回复

使用道具 举报

85#
发表于 2008-11-3 11:04:00 | 只看该作者
2003行吗?上次的我测试丢盘符。我的机器装有虚拟光驱,读卡器,盘符一大堆,结果虚拟光驱丢失,读卡器盘符显示不全,试试这个!
回复

使用道具 举报

84#
 楼主| 发表于 2008-11-3 10:43:41 | 只看该作者
XP下接近最终更新了,再更新就是使其适用于VISTA。
回复

使用道具 举报

83#
 楼主| 发表于 2008-11-1 21:13:24 | 只看该作者
请昨晚帮忙测试的朋友继续测试,BUG修正了。
回复

使用道具 举报

82#
发表于 2008-11-1 10:16:01 | 只看该作者
谢谢分享经验哈.学习了
回复

使用道具 举报

81#
发表于 2008-11-1 09:22:51 | 只看该作者
看完了,下下来先试试看。
回复

使用道具 举报

80#
发表于 2008-10-31 23:19:25 | 只看该作者
支持大大的更新,今晚测试一下
回复

使用道具 举报

79#
发表于 2008-10-31 23:11:43 | 只看该作者
虽然用不上,还是支持一下。
楼主精神可嘉。
回复

使用道具 举报

78#
 楼主| 发表于 2008-10-31 23:07:49 | 只看该作者
原帖由 lxl1638 于 2008-10-31 19:07 发表
路过而已,那堆代码会使人头晕。。。。。。。。。。。


该死的,等我最优化后再看。
回复

使用道具 举报

77#
发表于 2008-10-31 19:07:43 | 只看该作者
路过而已,那堆代码会使人头晕。。。。。。。。。。。
回复

使用道具 举报

76#
发表于 2008-10-31 15:39:46 | 只看该作者
刚开始接触,希望解决盘符问题
回复

使用道具 举报

75#
发表于 2008-10-29 12:35:42 | 只看该作者
这个目前还在初级学习中,先仔细的看看
谢谢楼主分享了
回复

使用道具 举报

74#
发表于 2008-10-29 10:19:05 | 只看该作者
支持一个,同时鄙视用了人家代码还这样加密那样加密的小偷.
回复

使用道具 举报

73#
 楼主| 发表于 2008-10-29 09:09:56 | 只看该作者
没有,我不研究PE,不想研究,怕钻进去出不来。
回复

使用道具 举报

72#
发表于 2008-10-29 09:07:32 | 只看该作者
版主的附件是否加入了WMI服务?
回复

使用道具 举报

71#
 楼主| 发表于 2008-10-29 08:20:11 | 只看该作者
又更新了,请测试吧。
回复

使用道具 举报

70#
 楼主| 发表于 2008-10-21 08:15:52 | 只看该作者

回复 #69 云飞日月 的帖子

用QQ联系一下:511519860
回复

使用道具 举报

69#
发表于 2008-10-21 08:00:54 | 只看该作者
我自己在pe中试了一下,五个命令都有,但是U盘启动,依然是U盘在D盘,本地硬盘中的D盘以及以后,还是变成了E盘以及以后,运行这个命令,本地硬盘中的D盘还是E盘,就是U盘变了,每运行一次,都随机变一次,其他盘符没有变化
这是啥原因?
回复

使用道具 举报

68#
 楼主| 发表于 2008-10-21 06:39:59 | 只看该作者
其实就是一个路径的问题,你看看,那几个命令应该在那个BASIC.WIM里。
回复

使用道具 举报

67#
发表于 2008-10-20 20:49:08 | 只看该作者
原帖由 victor888 于 2008-10-20 15:00 发表
你把那个FIND命令也加上再试试。

跟find无关,有可能用到的其他文件也被小马放到了basic.wim里面了吧。
回复

使用道具 举报

66#
 楼主| 发表于 2008-10-20 15:00:39 | 只看该作者

回复 #65 qusibago 的帖子

你把那个FIND命令也加上再试试。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-24 00:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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