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

[文本处理] [已解决]批处理怎样用管道查询指定卷标的盘符?

[复制链接]
发表于 2012-10-18 16:31:31 | 显示全部楼层 |阅读模式
做了个批处理 本意是显示对应卷标为 D^F 的盘符
运行之后 提示 系统找不到对应路径 检查了好多遍 不知道错在哪了 哪位能指出错在哪了!
  1. @echo off

  2. for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (

  3.   for /f %%h in ('vol %%a:^|findstr "D^F"') do (

  4.     set DriveU=%%h

  5.   )

  6. )

  7. echo.%DriveU%

  8. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2012-10-18 19:28:47 | 显示全部楼层
额 自己解决出来了 ................................
发表于 2012-10-19 11:45:35 | 显示全部楼层
回复 2# 539956485


    贴出来给大家分享一下吧
 楼主| 发表于 2012-10-20 11:24:16 | 显示全部楼层
第七行代码

  1. set DriveU=%%h
复制代码
应该是

  1. set DriveU=%%a
复制代码
自己粗心了
 楼主| 发表于 2012-10-20 11:32:50 | 显示全部楼层
每次执行都回显一大堆信息,不知道怎么把信息屏蔽不回显 哪位能给指导一下改一下代码....
发表于 2012-10-20 14:34:44 | 显示全部楼层
回复 5# 539956485


    回显的信息是因为没有找到那么多盘符。假设只有c d e f盘,那么从G盘开始会出现错误信息
要屏蔽错误信息,可以用if exist "%%a:\" 或者 2>nul,以下仅供参考:
  1. @echo off
  2. for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  3.   for /f "tokens=3*" %%h in ('vol %%a: 2^>nul^|find "驱动器"') do (
  4.     if "%%i"=="D^F" set "DrvU=%%a"&goto :11
  5.   )
  6. )
  7. :11
  8. echo,%DrvU%
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-10-20 16:34:30 | 显示全部楼层
回复 6# apang
我懂了 但又有问题了
假如 我
  1. vol c:
复制代码
屏幕回显内容是
  1. 驱动器 c 中的卷是 D^F
复制代码
用这段代码
  1. for /f "tokens=3*" %%h in ('vol c: 2^>nul^|find "驱动器"') do (
  2. echo %%h  )
复制代码
回显的内容是
  1. 中的卷是
复制代码
为什么 驱动器 后面 还有个 c 会直接跳过去
按理说 回显内容应该是 c  啊?
发表于 2012-10-20 19:58:18 | 显示全部楼层
回复 7# 539956485


不是这样子理解的。比如这一句:
  1. for /f "tokens=3*" %%h in ('vol c:^|find "驱动器"') do echo,%%h
复制代码
是将vol命令执行的结果"驱动器 c 中的卷是 D^F"再传给for处理

因为for语句省略了delims选项,默认以空格作为分隔符划分为4节

(或更多,如果"D^F"变成"D^F ABC"的话就是5节)。

tokens=3*的意思是将第3节(即:"中的卷是")开始后的两节:

"中的卷是"赋给变量%%h,"D^F"(或"D^F ABC")赋给%%i。

所以这条语句最后执行的结果显示的是:中的卷是

如果改成:
  1. for /f "tokens=2*" %%h in ('vol c:^|find "驱动器"') do echo,%%h
复制代码
显示的就是:c

建议学习一下置顶贴"批处理for语句从入门到精通",定会有收获。
 楼主| 发表于 2012-10-20 20:37:40 | 显示全部楼层
回复 8# apang


    非常感谢~~~
发表于 2022-12-7 19:48:53 | 显示全部楼层
请问 如果没有找到相应的卷标怎么加另一个条件echo 没有找到 呢?谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 10:27 , Processed in 0.021059 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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