Board logo

标题: fsutil fsinfo drives(已解决) [打印本页]

作者: Eblis     时间: 2007-1-13 09:39    标题: fsutil fsinfo drives(已解决)

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 ]
作者: Eblis     时间: 2007-1-13 10:31
我昏...帮帮忙啊``
作者: Eblis     时间: 2007-1-13 10:44
还想问个问题..find 不可以搜索2个字符串吗??
比如find /i "1.txt" "2.txt" 3.txt
搜索3.txt文件里的1.txt 和2.txt  2个字符串..
作者: Eblis     时间: 2007-1-13 10:52
3楼问题找到答案了...用findstr命令可以...帮忙回答1楼的..
作者: Eblis     时间: 2007-1-13 11:31
各位兄弟帮帮忙撒``
作者: Eblis     时间: 2007-1-13 11:53
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
作者: dikex     时间: 2007-1-13 14:01
发现fsutil fsinfo drives >drives.txt生成的drives.txt里面虽然有内容,但其ascii码居然有很多00!a.txt的内容是从drives.txt里面复制过去的(查看大小同样为32字节),但看看FC /b比较的结果

  Quote:
正在比较文件 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得到结果

  Quote:
***** 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 ]
作者: Eblis     时间: 2007-1-13 16:31
不知道上面的兄弟是怎么复制的..我这里比较却是没有异处
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的..都没有不同的..
作者: Eblis     时间: 2007-1-13 17:12
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
作者: Eblis     时间: 2007-1-13 17:38
实在想不通了..各位高手..
   不会是要用到..你们说的变量延时吧????我快郁闷死了..我先用
fsutil fsinfo drives >1.txt 然后type 1.txt >2.txt 再执行for 语句还是不能成功...
作者: Eblis     时间: 2007-1-13 18:08
***** drives.txt

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

我有点明白了为什么只显示一个C了..虽然我们fsutil fsinfo drives输出到文本之后看到是一行..而实际上是换行显示的..所以for 只能显示一条的字符串....
作者: Eblis     时间: 2007-1-13 22:19
测试完成..是没有办法显示的..ASCII码显示前2行是回车..不清楚了...希望高手能解答一下为什么会这样显示...
作者: zh159     时间: 2007-1-14 00:11
fsutil fsinfo drives|find /v "">drives.txt
作者: dikex     时间: 2007-1-14 04:30


  Quote:
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 ]
附件 1: 未命名.JPG (2007-1-14 04:30, 45.46 K, 下载附件所需积分 1点 ,下载次数: 1)



作者: zh159     时间: 2007-1-14 05:45
以前玩过的一段查找盘符改的,感觉比 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

作者: lxmxn     时间: 2007-1-14 07:56

@echo off
if "%~s1"=="" goto end
for /f "skip=1 delims= " %%a in ('Wmic LogicalDisk Get Caption') do (
        call set drive=%%drive%% %%a
)
echo %drive%
set/p=&exit/b 0

:end
Setlocal EnableDelayedExpansion
for /f "skip=1 delims= " %%a in ('Wmic LogicalDisk Get Caption') do (
        set a=%%a
        set drive=!drive! !a!
)
echo %drive%&EndLocal
set/p=&exit/b 0

作者: Eblis     时间: 2007-1-14 11:42
2个都好哇```
作者: kgdetg1127     时间: 2007-10-21 11:31
牛BI,
作者: zhangwencheng     时间: 2009-5-22 08:45
看得不太懂,运行了15楼和16楼的代码,好像是显示当前磁盘的。
如果是那样的话,我也发一个简单的命令:

fsutil fsinfo drives