Board logo

标题: [系统相关] [求助]批处理获取非系统盘的盘符 [打印本页]

作者: chishingchan    时间: 2024-1-24 20:55     标题: [求助]批处理获取非系统盘的盘符

情况如下:硬盘分成若干个分区: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
复制代码
总感觉虽然得到结果,但代码有点冗长!大大们能帮忙优化一下吗?谢谢!
作者: chishingchan    时间: 2024-1-24 21:23

修改了一下,好了一点点:
  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
复制代码

作者: ShowCode    时间: 2024-1-24 21:44

回复 2# chishingchan


    "tokens=1" 可以省略
作者: newswan    时间: 2024-1-24 22:58

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

作者: chishingchan    时间: 2024-1-25 12:23

回复 3# ShowCode


    谢谢!
作者: chishingchan    时间: 2024-1-25 12:23

回复 4# newswan


    这个与 XP 不兼容,谢谢!
作者: czjt1234    时间: 2024-1-25 13:14

还有xp啊,现在很少见了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2