[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

做了个批处理 本意是显示对应卷标为 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
无所谓而无所为 无所谓而无所不为

额 自己解决出来了 ................................
无所谓而无所为 无所谓而无所不为

TOP

回复 2# 539956485


    贴出来给大家分享一下吧

TOP

第七行代码
  1. set DriveU=%%h
复制代码
应该是
  1. set DriveU=%%a
复制代码
自己粗心了
无所谓而无所为 无所谓而无所不为

TOP

每次执行都回显一大堆信息,不知道怎么把信息屏蔽不回显 哪位能给指导一下改一下代码....
无所谓而无所为 无所谓而无所不为

TOP

回复 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

评分人数

TOP

回复 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  啊?
无所谓而无所为 无所谓而无所不为

TOP

回复 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语句从入门到精通",定会有收获。

TOP

回复 8# apang


    非常感谢~~~
无所谓而无所为 无所谓而无所不为

TOP

请问 如果没有找到相应的卷标怎么加另一个条件echo 没有找到 呢?谢谢

TOP

返回列表