标题: [系统相关] [求助]批处理获取非系统盘的盘符 [打印本页]
作者: 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 文件夹即确定此盘。- set Drive=.
- set Drives=.
- SETLOCAL ENABLEDELAYEDEXPANSION
- set Name=.
- 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
- set Drives=!Name!
- for %%i in (%Drives%) do if not exist "%%i\Windows\explorer.exe" (
- if exist %%i\Users (
- set Drive=%%i
- goto ExitFor
- ) else (
- set Drive=%%i
- )
- )
- :ExitFor
- SETLOCAL DISABLEDELAYEDEXPANSION
- echo %Drive%
- pause
复制代码
总感觉虽然得到结果,但代码有点冗长!大大们能帮忙优化一下吗?谢谢!
作者: chishingchan 时间: 2024-1-24 21:23
修改了一下,好了一点点:- @echo off
- set Drive=.
- set Drives=.
- SETLOCAL ENABLEDELAYEDEXPANSION
- set Name=
- 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
- set Drives=!Name!
- for %%i in (%Drives%) do if exist %%i\Users (
- set Drive=%%i
- goto ExitFor
- ) else (
- set Drive=%%i
- )
- )
- :ExitFor
- SETLOCAL DISABLEDELAYEDEXPANSION
- echo %Drive%
- pause
复制代码
作者: ShowCode 时间: 2024-1-24 21:44
回复 2# chishingchan
"tokens=1" 可以省略
作者: newswan 时间: 2024-1-24 22:58
试试- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |