Board logo

标题: 请教:如何用批处理判断某一扇区为空闲扇区? [打印本页]

作者: lianjiang2004     时间: 2007-6-4 16:58    标题: 请教:如何用批处理判断某一扇区为空闲扇区?

请教:如何用批处理判断某一扇区为空闲扇区?

比如我用软件读取39扇区后,得到的文件为039.txt,格式如下:
--------------

Disk 0 Absolute Sector 39 [0x27]
00000004E00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000004E90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
。。。。。
略去

------------------

我用的批处理如下,麻烦各位给看看,哪里除了问题。
----------
rem @echo off
if exist  %temp%\039.txt del %temp%\039.txt >nul
diskrw 0 39 1 /l >%temp%\039.txt
For /f "tokens=1-2 delims=:" %%i In ('type %temp%\039.txt ^| find ":"') do (
        set sector=%%j
        echo sector is "%sector%"
        pause
        if not "%sector%"==" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " goto sector_2c
)

:sector_2d
echo      39扇区为空闲扇区。
echo.
pause
goto sector_2b

:sector_2c


echo      39扇区不是空闲扇区。
echo.
pause
:sector_2b

[ Last edited by lianjiang2004 on 2007-6-4 at 05:00 PM ]
作者: lianjiang2004     时间: 2007-6-4 17:01
读出的“"%sector%”无值,不知何故。
作者: lxmxn     时间: 2007-6-4 17:16
没有启用变量延迟。

在批处理的开始加上“SetLocal EnableDelayedExpansion”,再把%sector%改成!sector!试试,不行再跟帖讨论。
作者: lianjiang2004     时间: 2007-6-4 17:20
还是无值。只是显示成 sector is "!sector!"。
作者: qzwqzw     时间: 2007-6-4 18:16
即使所有数据为0

也不保证这个扇区未被使用

更不保证这个扇区将不会使用

所以这只能是辅助的判定办法

还需要依靠其他的办法来做主判定
作者: lianjiang2004     时间: 2007-6-4 18:23


  Quote:
Originally posted by qzwqzw at 2007-6-4 18:16:
即使所有数据为0

也不保证这个扇区未被使用

更不保证这个扇区将不会使用

所以这只能是辅助的判定办法

还需要依靠其他的办法来做主判定

请教有何主判定法?
我想用的是一个保留扇区里的一个空闲扇区。
一般软件是不会用的,我想也无需保证将不会被用。呵呵,就像别人能用,我也能用,我想只要是还没用的就行吧。
作者: terse     时间: 2007-6-4 18:38


  Quote:
Originally posted by lianjiang2004 at 2007-6-4 17:20:
还是无值。只是显示成 sector is "!sector!"。

帮你试过  可以的啊!
sector is " 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
请按任意键继续. . .
     39扇区不是空闲扇区。

请按任意键继续. . .
作者: lxmxn     时间: 2007-6-4 18:41
怎么会没有呢?

我这里测试正常。
@echo off
SetLocal EnableDelayedExpansion
For /f "tokens=1-2 delims=:" %%i In ('type 009.txt ^| find ":"') do (
        set sector=%%j
        echo sector is "!sector!"
        pause
        if not "%sector%"==" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " goto sector_2c
)
pause

作者: lianjiang2004     时间: 2007-6-4 18:52
怪事,把8楼的拷贝进去,有值了。
作者: lianjiang2004     时间: 2007-6-4 18:55
我想要的是有不为“ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 “的行才显示不是空闲扇区,怎么全是0,也显示不是空闲扇区了?我的批处理中哪里还有问题?
作者: lianjiang2004     时间: 2007-6-4 18:58
知道了,要改成 if not "!sector!"==" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " goto sector_2c
作者: lianjiang2004     时间: 2007-6-4 19:01
请教,为何开头部分一定要加上“SetLocal EnableDelayedExpansion”
以前用的类似批处理,没有也行的。就像1楼的批处理那样。
作者: lxmxn     时间: 2007-6-4 19:05
以“变量延迟”为关键字搜索一下。
作者: terse     时间: 2007-6-4 19:15
拿掉第一个pause  更方便一点嘛
作者: lianjiang2004     时间: 2007-6-4 19:20
因为批处理没通过,所以在差错,也就多了一些显示的地方。
发现那里变量无值,所以才来请求帮助的。解决了,当然要去掉无用信息,要结果即可。多谢。
作者: lianjiang2004     时间: 2007-6-4 19:30
即使所有数据为0
也不保证这个扇区未被使用
--------------------------------------
这句话,能不能解释一下,为什么?