标题: [文本处理] [已解决]批处理怎样用管道查询指定卷标的盘符? [打印本页]
作者: 539956485 时间: 2012-10-18 16:31 标题: [已解决]批处理怎样用管道查询指定卷标的盘符?
做了个批处理 本意是显示对应卷标为 D^F 的盘符
运行之后 提示 系统找不到对应路径 检查了好多遍 不知道错在哪了 哪位能指出错在哪了!- @echo off
-
- 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 (
-
- for /f %%h in ('vol %%a:^|findstr "D^F"') do (
-
- set DriveU=%%h
-
- )
-
- )
-
- echo.%DriveU%
-
- pause
复制代码
作者: 539956485 时间: 2012-10-18 19:28
额 自己解决出来了 ................................
作者: forfiles 时间: 2012-10-19 11:45
回复 2# 539956485
贴出来给大家分享一下吧
作者: 539956485 时间: 2012-10-20 11:24
第七行代码复制代码
应该是复制代码
自己粗心了
作者: 539956485 时间: 2012-10-20 11:32
每次执行都回显一大堆信息,不知道怎么把信息屏蔽不回显 哪位能给指导一下改一下代码....
作者: apang 时间: 2012-10-20 14:34
回复 5# 539956485
回显的信息是因为没有找到那么多盘符。假设只有c d e f盘,那么从G盘开始会出现错误信息
要屏蔽错误信息,可以用if exist "%%a:\" 或者 2>nul,以下仅供参考:- @echo off
- 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 (
- for /f "tokens=3*" %%h in ('vol %%a: 2^>nul^|find "驱动器"') do (
- if "%%i"=="D^F" set "DrvU=%%a"&goto :11
- )
- )
- :11
- echo,%DrvU%
- pause
复制代码
作者: 539956485 时间: 2012-10-20 16:34
回复 6# apang
我懂了 但又有问题了
假如 我复制代码
屏幕回显内容是复制代码
用这段代码- for /f "tokens=3*" %%h in ('vol c: 2^>nul^|find "驱动器"') do (
- echo %%h )
复制代码
回显的内容是复制代码
为什么 驱动器 后面 还有个 c 会直接跳过去
按理说 回显内容应该是 c 啊?
作者: apang 时间: 2012-10-20 19:58
回复 7# 539956485
不是这样子理解的。比如这一句:- 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。
所以这条语句最后执行的结果显示的是:中的卷是
如果改成:- for /f "tokens=2*" %%h in ('vol c:^|find "驱动器"') do echo,%%h
复制代码
显示的就是:c
建议学习一下置顶贴"批处理for语句从入门到精通",定会有收获。
作者: 539956485 时间: 2012-10-20 20:37
回复 8# apang
非常感谢~~~
作者: jzwtxp 时间: 2022-12-7 19:48
请问 如果没有找到相应的卷标怎么加另一个条件echo 没有找到 呢?谢谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |