标题: [文本处理] 批处理根据卷标判断盘符时,怎样分别赋值给不同的变量? [打印本页]
作者: 5i365 时间: 2021-8-14 12:09 标题: 批处理根据卷标判断盘符时,怎样分别赋值给不同的变量?
下面的代码,可以根据卷标得出盘符,例如,可以找到卷标是win和efi的分区盘符, 并分别赋值给了变量%win%和%efi%
如果有两个卷标为win的分区,怎样将第一个分区的盘符赋值给%win1%,第二个分区的盘符赋值给%win2%?
同样:
如果有两个卷标为efi的分区,怎样将第一个分区的盘符赋值给%efi1%,第二个分区的盘符赋值给%efi2%?- for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A ) do (
- vol %%a:|findstr /i /e win&&set win=%%a
- vol %%a:|findstr /i /e efi&&set efi=%%a
- )
复制代码
作者: newswan 时间: 2021-8-14 12:35
- setlocal ENABLEDELAYEDEXPANSION
- set /a n=0
- for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A ) do (
- set n+=1
- vol %%a:|findstr /i /e win&&set win!n!=%%a
- vol %%a:|findstr /i /e efi&&set efi!n!=%%a
- )
- echo %win1%
- echo %efi1%
复制代码
作者: 5i365 时间: 2021-8-14 12:53
回复 2# newswan
多谢帮忙, 刚试了一下, 没有回显任何值
作者: newswan 时间: 2021-8-14 13:00
回复 3# 5i365
这个没输出啊- vol %%a:|findstr /i /e win
复制代码
作者: newswan 时间: 2021-8-14 13:02
复制代码
应该这样吧
作者: 5i365 时间: 2021-8-14 13:03
回复 4# newswan
现在系统里有两个卷标为win的分区,上面的代码执行后如下
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>vol %%a:|findstr /i /e win
系统找不到指定的驱动器。
C:\Users\Administrator>
作者: 5i365 时间: 2021-8-14 13:03
回复 5# newswan
只通过卷标判断盘符, 不用管有没有win系统
作者: idwma 时间: 2021-8-14 13:06
回复 2# newswan
计数位置换一下就可以了- setlocal ENABLEDELAYEDEXPANSION
- for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A ) do (
- vol %%a:|findstr /i /e win&&set/a n+=1&&set win!n!=%%a
- vol %%a:|findstr /i /e efi&&set/a nn+=1&&set efi!nn!=%%a
- )
- echo %win1%
- echo %efi1%
- echo %win2%
- echo %efi2%
复制代码
作者: newswan 时间: 2021-8-14 13:08
本帖最后由 newswan 于 2021-8-14 13:13 编辑
回复 7# 5i365 - vol %%a:|findstr /i /e "win"
复制代码
复制代码
作者: 5i365 时间: 2021-8-14 13:11
回复 8# idwma
多谢, 应该快成了, 但是顺序反了, 应该win1 是C win2是D
驱动器 D 中的卷是 win
驱动器 C 中的卷是 win
win1 D
efi1
win2 C
efi2
请按任意键继续. . .
作者: 5i365 时间: 2021-8-14 13:14
回复 6# 5i365
下面这行去掉, 还有办法实现吗? 因为这个功能的代码,我要用在批处理内部
setlocal ENABLEDELAYEDEXPANSION
作者: idwma 时间: 2021-8-14 13:21
回复 10# 5i365
把那 for 里的字母排序改成abcd这样的
作者: idwma 时间: 2021-8-14 13:30
- for %%a in (a b c d) do (
- vol %%a:|findstr /i /e win&&set/a n+=1&&call;set win%%n%%=%%a
- vol %%a:|findstr /i /e efi&&set/a nn+=1&&call;set efi%%nn%%=%%a
- )
- echo %win1%
- echo %efi1%
- echo %win2%
- echo %efi2%
复制代码
回复 11# 5i365
作者: 5i365 时间: 2021-8-14 15:32
回复 13# idwma
不错, 同样可以执行成功, 感谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |