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

[系统相关] [求助]批处理获取非系统盘的盘符

情况如下:硬盘分成若干个分区:0,1、0,2、0,3、...
0,1: 安装了 XP,若启动,7 分区为 E:,我的文档位置为 D: 盘
0,2: 安装了 7,若启动,此盘为 C 盘,XP 为 D:,我的文档位置为 E: 盘
0,3: 我的文档位置(X:\Users\用户名\...) X 可能是 D: 也可能是 E:
我在 XP、7 系统安装的时候迁移数据到 0,3 (我的文档)位置。

为了准确的获取我在安装系统时将盘符改到的位置,于是我写了这个批处理:
要求:
1、我的文档位置不能存在 Windows 系统;
2、在不含操作系统的盘上如果存在 X:\Users 文件夹即确定此盘。
  1. set Drive=.
  2. set Drives=.
  3. SETLOCAL ENABLEDELAYEDEXPANSION
  4. set Name=.
  5. for /f "tokens=3" %%i in ('wmic logicaldisk where DriveType^=3 Get FileSystem^,FreeSpace^,Name^,Size^|findstr ":"') do if not %%i==%SystemDrive% set Name=!Name! %%i
  6. set Drives=!Name!
  7. for %%i in (%Drives%) do if not exist "%%i\Windows\explorer.exe" (
  8. if exist %%i\Users (
  9. set Drive=%%i
  10. goto ExitFor
  11. ) else (
  12. set Drive=%%i
  13. )
  14. )
  15. :ExitFor
  16. SETLOCAL DISABLEDELAYEDEXPANSION
  17. echo %Drive%
  18. pause
复制代码
总感觉虽然得到结果,但代码有点冗长!大大们能帮忙优化一下吗?谢谢!

修改了一下,好了一点点:
  1. @echo off
  2. set Drive=.
  3. set Drives=.
  4. SETLOCAL ENABLEDELAYEDEXPANSION
  5. set Name=
  6. for /f "tokens=1" %%i in ('wmic logicaldisk where DriveType^=3 Get Name^|findstr ":"') do if not exist "%%i\Windows\explorer.exe" set Name=!Name! %%i
  7. set Drives=!Name!
  8. for %%i in (%Drives%) do if exist %%i\Users (
  9. set Drive=%%i
  10. goto ExitFor
  11. ) else (
  12. set Drive=%%i
  13. )
  14. )
  15. :ExitFor
  16. SETLOCAL DISABLEDELAYEDEXPANSION
  17. echo %Drive%
  18. pause
复制代码

TOP

回复 2# chishingchan


    "tokens=1" 可以省略
测试代码之前请做好备份

TOP

试试
  1. powershell -command "&  Get-Partition | Where-Object isboot "
复制代码

TOP

回复 3# ShowCode


    谢谢!

TOP

回复 4# newswan


    这个与 XP 不兼容,谢谢!

TOP

还有xp啊,现在很少见了

QQ 20147578

TOP

返回列表