Board logo

标题: [系统相关] XP下批处理如何截取fsutil fsinfo drives返回结果中的盘符/驱动器号 [打印本页]

作者: liumtz    时间: 2016-11-6 13:13     标题: XP下批处理如何截取fsutil fsinfo drives返回结果中的盘符/驱动器号

本帖最后由 pcl_test 于 2016-11-6 14:19 编辑

XP和WIN7下fsutil fsinfo drives在for循环中的运行结果不一样
  1. for /f "tokens=1-4" %%a in ('fsutil fsinfo drives^|find "驱动器"') do (
  2. echo [%%a]
  3. echo [%%b]
  4. echo [%%c]
  5. echo [%%d]
  6. )
  7. pause
复制代码
遍历当前系统所有的驱动器盘符,WIN7下echo能正常返回结果,XP下莫名其妙%c、%d取不到值?
XP下返回信息如下:

C:\Documents and Settings\Administrator\桌面\LpkKiller>for /F "tokens=1-4" %a in
('fsutil fsinfo drives|find "驱动器"') do (
echo [%a]
echo [%b]
echo [%c]
echo [%d]
)

C:\Documents and Settings\Administrator\桌面\LpkKiller>(
echo [驱动器:]
echo [C:\]
echo []
echo []
)
[驱动器:]
[C:\]
[]
[]

C:\Documents and Settings\Administrator\桌面\LpkKiller>pause
请按任意键继续. . .

作者: pcl_test    时间: 2016-11-6 14:30

既然知道是fsutil fsinfo drives的结果不一样,就应该把fsutil fsinfo drives|find "驱动器">a.txt的输出结果导出到txt文件上传出来,而不是像顶楼那样把整条for语句(for:怪我噶,这个黑锅我不背)的输出结果复制粘贴出来,那样对解决问题毫无用处,对于在用xp系统人来说,不需要,因为可以直接测试,对于在用win7及以上系统人来说,没用呀,看不到区别,怎么测试

像这种问题,往往都是命令返回结果带了不显示的特殊字符,在wmic命令中常见,常用方法就是把结果set给变量,再对变量进行处理,或是把结果通过管道符|传给more处理下,另外获取所有盘符的方法有多种,不要局限于一种
作者: liumtz    时间: 2016-11-6 14:49

回复 2# pcl_test
刚在XP下试了一下,cmd直接运行fsutil fsinfo drives|find "驱动器">c:\drives.txt得到的结果果然和预期的不一样。。。
打开c:\drives.txt显示如下:
驱动器: C:\

按理应该得到驱动器: C:\ D:\ E:\ F:\
为什么会丢失一部分- -!感觉也没啥特别的东西在里面啊。。
作者: liumtz    时间: 2016-11-6 15:07

回复 2# pcl_test
我又测试了一些情况,结果如下:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>fsutil fsinfo drives|find "驱动器"
驱动器: C:\

C:\Documents and Settings\Administrator>fsutil fsinfo drives

驱动器: C:\ D:\ E:\ F:\ G:\

C:\Documents and Settings\Administrator>fsutil fsinfo drives|find "\"
驱动器: C:\
D:\
E:\
F:\
G:\

C:\Documents and Settings\Administrator>fsutil fsinfo drives|find ":"
驱动器: C:\
D:\
E:\
F:\
G:\

C:\Documents and Settings\Administrator>fsutil fsinfo drives|find " "
驱动器: C:\

C:\Documents and Settings\Administrator>fsutil fsinfo drives|find "C"
驱动器: C:\

C:\Documents and Settings\Administrator>fsutil fsinfo drives|find "D"
D:\

find为什么不返回一整行?为什么find "\"find ":"返回多行?为什么各种意外?批处理为什么这么折磨人。。。
作者: liumtz    时间: 2016-11-6 15:15

而且还有一个更奇怪的情况,我试图将CMD中 驱动器: C:\ D:\ E:\ F:\ G:\ 这一行复制到一个文本文档中,见鬼了,粘贴进去,D:\ E:\ F:\ G:\ 这些字符又不见了,只粘贴到 驱动器: C:\ 这几个字符。。。
作者: liumtz    时间: 2016-11-6 15:33

回复 2# pcl_test
就像你说的结果中肯定包含了某些不可见的特殊字符,无语了,MS果然没个准!!
作者: liumtz    时间: 2016-11-6 15:46

  1. @echo off
  2. set "drives=C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  3. for %%a in (%drives%) do (
  4. for /f "tokens=1" %%i in ('fsutil fsinfo drivetype %%a:^|find "固定"^|^|fsutil fsinfo drivetype %%a:^|find "可移动"') do (
  5. echo [%%i]
  6. ))
  7. pause
复制代码
换个方式实现,XP、win7下测试均通过~




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2