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

[系统相关] Windows7下修改光驱、U盘盘符的批处理如何优化?

本人初学乍练,请高手帮忙优化一下
    先说一下条件:
1、光驱和U盘的数量不能同时超过2个。至于在主板上插满光驱和U盘的强人—_—!请自行修改
2、本办法可以把根目录下含有BOOTMGR启动文件的光驱设为Z,U盘设为W,启动文件不同请自行修改
3、启动PE后请把本批处理文件copy到X盘符下
4、本办法在PE3.0下测试通过,请各位帮忙测试,Vista的没试,应该可以,WinXP的PE不行。
5、本办法U盘部分只支持简体中文版的PE,其他语种请修改“移动”二字。
6、高手帮忙看下,可否优化。


将下列代码保存为批处理文件:
  1. @echo off
  2. @echo list volume > disktemp.txt
  3. diskpart /s disktemp.txt|findstr /i d-rom|findstr /i /n d-rom > cdtemp.txt
  4. diskpart /s disktemp.txt|findstr /i 移动|findstr /i /n 移动 > usbtemp.txt
  5. for /f "tokens=3" %%a in ('find /c /i "d-rom" cdtemp.txt') do set cdnum=%%a
  6. for /f "tokens=3" %%a in ('find /c /i "移动" usbtemp.txt') do set usbnum=%%a
  7. echo 这台电脑上配置有:%cdnum%个光驱,%usbnum%个闪存。
  8. if %cdnum% equ 0 if %usbnum% equ 0 goto:L
  9. if %cdnum% equ 0 if %usbnum% gtr 2 goto:M
  10. if %cdnum% gtr 2 if %usbnum% equ 0 goto:M
  11. if %cdnum% gtr 2 if %usbnum% gtr 2 goto:M
  12. if %cdnum% equ 1 if %usbnum% equ 0 call:J
  13. if %cdnum% equ 1 if %usbnum% equ 0 call:A
  14. if %cdnum% equ 2 if %usbnum% equ 0 call:J
  15. if %cdnum% equ 2 if %usbnum% equ 0 call:A
  16. if %cdnum% equ 1 if %usbnum% gtr 2 call:J
  17. if %cdnum% equ 1 if %usbnum% gtr 2 call:A
  18. if %cdnum% equ 2 if %usbnum% gtr 2 call:J
  19. if %cdnum% equ 2 if %usbnum% gtr 2 call:A
  20. if %cdnum% equ 0 if %usbnum% equ 1 call:K
  21. if %cdnum% equ 0 if %usbnum% equ 1 call:B
  22. if %cdnum% equ 0 if %usbnum% equ 2 call:K
  23. if %cdnum% equ 0 if %usbnum% equ 2 call:B
  24. if %cdnum% gtr 2 if %usbnum% equ 1 call:K
  25. if %cdnum% gtr 2 if %usbnum% equ 1 call:B
  26. if %cdnum% gtr 2 if %usbnum% equ 2 call:K
  27. if %cdnum% gtr 2 if %usbnum% equ 2 call:B
  28. if %cdnum% equ 1 if %usbnum% equ 1 call:I
  29. if %cdnum% equ 1 if %usbnum% equ 1 call:A
  30. if %cdnum% equ 1 if %usbnum% equ 1 call:B
  31. if %cdnum% equ 1 if %usbnum% equ 2 call:I
  32. if %cdnum% equ 1 if %usbnum% equ 2 call:A
  33. if %cdnum% equ 1 if %usbnum% equ 2 call:B
  34. if %cdnum% equ 2 if %usbnum% equ 1 call:I
  35. if %cdnum% equ 2 if %usbnum% equ 1 call:A
  36. if %cdnum% equ 2 if %usbnum% equ 1 call:B
  37. if %cdnum% equ 2 if %usbnum% equ 2 call:I
  38. if %cdnum% equ 2 if %usbnum% equ 2 call:A
  39. if %cdnum% equ 2 if %usbnum% equ 2 call:B
  40. @echo 当前驱动器号分配如下:
  41. diskpart /s disktemp.txt
  42. @echo 当前驱动器号分配如下:
  43. @echo list volume > disktemp.txt
  44. diskpart /s disktemp.txt
  45. goto:eof
  46. :A
  47. for /f "tokens=1,3 delims=:, " %%a in (cdtemp.txt) do set cdvol%%a=%%b
  48. for /f "tokens=1,4 delims=:, " %%a in (cdtemp.txt) do set cdltr%%a=%%b
  49. if %cdnum% equ 1 (call:G) else (if exist %cdltr1%:\bootmgr (call:C) else call:D)
  50. goto:eof
  51. :B
  52. for /f "tokens=1,3 delims=:, " %%a in (usbtemp.txt) do set usbvol%%a=%%b
  53. for /f "tokens=1,4 delims=:, " %%a in (usbtemp.txt) do set usbltr%%a=%%b
  54. if %usbnum% equ 1 (call:H) else (if exist %usbltr1%:\bootmgr (call:E) else call:F)
  55. goto:eof
  56. :C
  57. @echo select volume %cdvol1% >> disktemp.txt
  58. @echo remove letter=%cdltr1% >> disktemp.txt
  59. @echo assign letter=z >> disktemp.txt
  60. @echo select volume %cdvol2% >> disktemp.txt
  61. @echo remove letter=%cdltr2% >> disktemp.txt
  62. @echo assign letter=y >> disktemp.txt
  63. goto:eof
  64. :D
  65. @echo select volume %cdvol1% >> disktemp.txt
  66. @echo remove letter=%cdltr1% >> disktemp.txt
  67. @echo assign letter=y >> disktemp.txt
  68. @echo select volume %cdvol2% >> disktemp.txt
  69. @echo remove letter=%cdltr2% >> disktemp.txt
  70. @echo assign letter=z >> disktemp.txt
  71. goto:eof
  72. :E
  73. @echo select volume %usbvol1% >> disktemp.txt
  74. @echo remove letter=%usbltr1% >> disktemp.txt
  75. @echo assign letter=w >> disktemp.txt
  76. @echo select volume %usbvol2% >> disktemp.txt
  77. @echo remove lettet=%usbltr2% >> disktemp.txt
  78. @echo assign letter=v >> disktemp.txt
  79. goto:eof
  80. :F
  81. @echo select volume %usbvol1% >> disktemp.txt
  82. @echo remove letter=%usbltr1% >> disktemp.txt
  83. @echo assign letter=v >> disktemp.txt
  84. @echo select volume %usbvol2% >> disktemp.txt
  85. @echo remove letter=%usbltr2% >> disktemp.txt
  86. @echo assign letter=w >> disktemp.txt
  87. goto:eof
  88. :G
  89. @echo select volume %cdvol1% >> disktemp.txt
  90. @echo remove letter=%cdltr1% >> disktemp.txt
  91. @echo assign letter=z >> disktemp.txt
  92. goto:eof
  93. :H
  94. @echo select volume %usbvol1% >> disktemp.txt
  95. @echo remove letter=%usbltr1% >> disktemp.txt
  96. @echo assign letter=w >> disktemp.txt
  97. goto:eof
  98. :I
  99. @echo 正在给光盘驱动器和闪存盘重新分配驱动器号,请稍候...
  100. goto:eof
  101. :J
  102. @echo 正在给光盘驱动器重新分配驱动器号,请稍候...
  103. goto:eof
  104. :K
  105. @echo 正在给闪存盘重新分配驱动器号,请稍候...
  106. goto:eof
  107. :L
  108. @echo 不需要重新设置&pause&&goto:eof
  109. :M
  110. @echo 超过超过数量上限 2 请修改本批处理文件后再运行&pause&&goto:eof
复制代码

返回列表