找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22402|回复: 13

[文本处理] 批处理根据卷标判断盘符时,怎样分别赋值给不同的变量?

[复制链接]
发表于 2021-8-14 12:09:38 | 显示全部楼层 |阅读模式
下面的代码,可以根据卷标得出盘符,例如,可以找到卷标是win和efi的分区盘符, 并分别赋值给了变量%win%和%efi%

如果有两个卷标为win的分区,怎样将第一个分区的盘符赋值给%win1%,第二个分区的盘符赋值给%win2%?
同样:
如果有两个卷标为efi的分区,怎样将第一个分区的盘符赋值给%efi1%,第二个分区的盘符赋值给%efi2%?
  1. 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 (
  2. vol %%a:|findstr /i /e win&&set win=%%a
  3. vol %%a:|findstr /i /e efi&&set efi=%%a
  4. )
复制代码
发表于 2021-8-14 12:35:16 | 显示全部楼层

  1. setlocal ENABLEDELAYEDEXPANSION
  2. set /a n=0
  3. 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 (
  4.     set n+=1
  5.     vol %%a:|findstr /i /e win&&set win!n!=%%a
  6.     vol %%a:|findstr /i /e efi&&set efi!n!=%%a
  7. )
  8. echo %win1%
  9. echo %efi1%
复制代码
 楼主| 发表于 2021-8-14 12:53:03 | 显示全部楼层
回复 2# newswan

多谢帮忙, 刚试了一下, 没有回显任何值
发表于 2021-8-14 13:00:29 | 显示全部楼层
回复 3# 5i365

这个没输出啊
  1. vol %%a:|findstr /i /e win
复制代码
发表于 2021-8-14 13:02:34 | 显示全部楼层

  1. if exist c:\windows
复制代码
应该这样吧
 楼主| 发表于 2021-8-14 13:03:01 | 显示全部楼层
回复 4# newswan

现在系统里有两个卷标为win的分区,上面的代码执行后如下

    Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>vol %%a:|findstr /i /e win
系统找不到指定的驱动器。

C:\Users\Administrator>
 楼主| 发表于 2021-8-14 13:03:58 | 显示全部楼层
回复 5# newswan


只通过卷标判断盘符, 不用管有没有win系统
发表于 2021-8-14 13:06:36 | 显示全部楼层
回复 2# newswan

计数位置换一下就可以了
  1. setlocal ENABLEDELAYEDEXPANSION
  2. 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 (
  3.     vol %%a:|findstr /i /e win&&set/a n+=1&&set win!n!=%%a
  4.     vol %%a:|findstr /i /e efi&&set/a nn+=1&&set efi!nn!=%%a
  5. )
  6. echo %win1%
  7. echo %efi1%
  8. echo %win2%
  9. echo %efi2%
复制代码
发表于 2021-8-14 13:08:42 | 显示全部楼层
本帖最后由 newswan 于 2021-8-14 13:13 编辑

回复 7# 5i365
  1. vol %%a:|findstr /i /e "win"
复制代码
  1. set /a n+=1
复制代码
 楼主| 发表于 2021-8-14 13:11:57 | 显示全部楼层
回复 8# idwma


    多谢, 应该快成了, 但是顺序反了, 应该win1 是C  win2是D

驱动器 D 中的卷是 win
驱动器 C 中的卷是 win
win1 D
efi1
win2 C
efi2
请按任意键继续. . .
 楼主| 发表于 2021-8-14 13:14:18 | 显示全部楼层
回复 6# 5i365


    下面这行去掉, 还有办法实现吗? 因为这个功能的代码,我要用在批处理内部
setlocal ENABLEDELAYEDEXPANSION
发表于 2021-8-14 13:21:22 | 显示全部楼层
回复 10# 5i365


    把那 for 里的字母排序改成abcd这样的
发表于 2021-8-14 13:30:24 | 显示全部楼层

  1.     for %%a in (a b c d) do (
  2.         vol %%a:|findstr /i /e win&&set/a n+=1&&call;set win%%n%%=%%a
  3.         vol %%a:|findstr /i /e efi&&set/a nn+=1&&call;set efi%%nn%%=%%a
  4.     )
  5.     echo %win1%
  6.     echo %efi1%
  7.     echo %win2%
  8.     echo %efi2%
复制代码
回复 11# 5i365
 楼主| 发表于 2021-8-14 15:32:32 | 显示全部楼层
回复 13# idwma

不错, 同样可以执行成功, 感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 22:20 , Processed in 0.043059 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表