中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-24 13:24
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » fsutil fsinfo drives(已解决) 查看 2,793 回复 18
楼 主 fsutil fsinfo drives(已解决) 发表于 2007-01-13 09:39 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
fsutil fsinfo drives >drives.txt
for /f "skip=1 tokens=1 delims=:" %%i in (drives.txt) do set drivers=%%i

这2行有什么错误?为什么不能set drivers?

[ Last edited by Eblis on 2007-1-13 at 11:16 PM ]
2 发表于 2007-01-13 10:31 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
我昏...帮帮忙啊``
3 发表于 2007-01-13 10:44 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
还想问个问题..find 不可以搜索2个字符串吗??
比如find /i "1.txt" "2.txt" 3.txt
搜索3.txt文件里的1.txt 和2.txt 2个字符串..
4 发表于 2007-01-13 10:52 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
3楼问题找到答案了...用findstr命令可以...帮忙回答1楼的..
5 发表于 2007-01-13 11:31 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
各位兄弟帮帮忙撒``
6 发表于 2007-01-13 11:53 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
fsutil fsinfo drives >drives.txt
for /f "skip=1 tokens=1* delims=:" %%I in (drives.txt) do @set drives=%%I %%j

我只是想把drives.txt里面的:驱动器: C:\ D:\ E:\ F:\ G:\ H:\ set drives=c d e f g h
7 发表于 2007-01-13 14:01 ·  中国 广东 广州 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
发现fsutil fsinfo drives >drives.txt生成的drives.txt里面虽然有内容,但其ascii码居然有很多00!a.txt的内容是从drives.txt里面复制过去的(查看大小同样为32字节),但看看FC /b比较的结果


正在比较文件 drives.txt 和 A.TXT
0000000D: 00 20
00000011: 00 20
00000015: 00 20
00000019: 00 20
0000001D: 00 20


下面的代码也出问题了……
for /f "skip=1 tokens=2-6 delims=:\" %i in ('fsutil fsinfo drives') do echo %i %j %k %l %m %n

这个只有%i显示成功,但将'fsutil fsinfo drives'换为上面那个a.txt时则成功了……
看来是fsutil fsinfo drives的输出有问题了……

这次运行fc drives.txt a.txt得到结果

***** drives.txt

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

***** A.TXT

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


但用for /f %i in (a.txt) do echo %i 却只能显示“驱动器:”

[ Last edited by dikex on 2007-1-13 at 02:56 PM ]
8 发表于 2007-01-13 16:31 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
不知道上面的兄弟是怎么复制的..我这里比较却是没有异处
G:\DOS\BAT>fc /b drives.txt 1.txt
正在比较文件 drives.txt 和 1.TXT
FC: 找不到相异处
G:\DOS\BAT>fc /b drives.txt 2.txt
正在比较文件 drives.txt 和 2.TXT
FC: 找不到相异处

1.txt是文件内容复制的..2.txt是copy drives.txt的..都没有不同的..
9 发表于 2007-01-13 17:12 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
for /f "skip=1 tokens=2-10 delims=:\ " %%a in (2.txt) do @set drives=%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j

为什么这句之后会显示 set drives=c d e f g h %j
10 发表于 2007-01-13 17:38 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
实在想不通了..各位高手..
不会是要用到..你们说的变量延时吧????我快郁闷死了..我先用
fsutil fsinfo drives >1.txt 然后type 1.txt >2.txt 再执行for 语句还是不能成功...
11 发表于 2007-01-13 18:08 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
***** drives.txt

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

我有点明白了为什么只显示一个C了..虽然我们fsutil fsinfo drives输出到文本之后看到是一行..而实际上是换行显示的..所以for 只能显示一条的字符串....
12 发表于 2007-01-13 22:19 ·  中国 广东 广州 白云区 电信
中级用户
★★
积分 251
发帖 108
注册 2007-01-07 11:33
19年会员
UID 75721
性别 男
来自 湖南==>广州
状态 离线
测试完成..是没有办法显示的..ASCII码显示前2行是回车..不清楚了...希望高手能解答一下为什么会这样显示...
13 发表于 2007-01-14 00:11 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
fsutil fsinfo drives|find /v "">drives.txt
14 发表于 2007-01-14 04:30 ·  中国 广东 广州 电信
高级用户
★★★
潜水修练批处理
积分 788
发帖 366
注册 2006-12-31 02:43
19年会员
UID 75048
性别 男
状态 离线
Originally posted by Eblis at 2007-1-13 03:31 AM:
不知道上面的兄弟是怎么复制的..我这里比较却是没有异处
G:\DOS\BAT>fc /b drives.txt 1.txt
正在比较文件 drives.txt 和 1.TXT
FC: 找不到相异处
G:\DOS\BAT>f ...

双击打开那个文本,然后全选,复制,新建一个文本,粘贴



让我们看看下图中winhex的对比结果吧,20在上面的复制前是00这个结束符的,所以for在处理这些字符串时遇到了00,就以为结束了而不继续处理下去,自然就得不到我们想要的结果了,也就是说对于for来说,它要处理的就只有驱动器: C:\这些数据,因此for /f "skip=1 tokens=2-6 delims=:\" %i in ('fsutil fsinfo drives') do echo %i %j %k %l %m %nfor /f %i in (a.txt) do echo %i 都只能显示出一部分来

[ Last edited by dikex on 2007-1-13 at 03:31 PM ]
附件
未命名.JPG
15 发表于 2007-01-14 05:45 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
以前玩过的一段查找盘符改的,感觉比 15 楼的效率稍高些
@echo off
for /f "tokens=1*" %%i in ('fsutil fsinfo drives^|find /v ""') do (
for /f "tokens=1* delims=:" %%n in ("%%j%%i") do (
call set drive=%%drive%%%%n
)
)
echo %drive%
pause
exit
论坛跳转: