中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 15:51
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 请教:如何用批处理判断某一扇区为空闲扇区?
可打印版本  2,569 / 15
第1楼 lianjiang2004 发表于 2007-06-04 16:58
金牌会员 发帖 1,884 积分 3,946
请教:如何用批处理判断某一扇区为空闲扇区?
请教:如何用批处理判断某一扇区为空闲扇区?

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

Disk 0 Absolute Sector 39
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 ]
第2楼 lianjiang2004 发表于 2007-06-04 17:01
金牌会员 发帖 1,884 积分 3,946
读出的“"%sector%”无值,不知何故。
第3楼 lxmxn 发表于 2007-06-04 17:16
版主 发帖 4,938 积分 11,386
没有启用变量延迟。

在批处理的开始加上“SetLocal EnableDelayedExpansion”,再把%sector%改成!sector!试试,不行再跟帖讨论。
第4楼 lianjiang2004 发表于 2007-06-04 17:20
金牌会员 发帖 1,884 积分 3,946
还是无值。只是显示成 sector is "!sector!"。
第5楼 qzwqzw 发表于 2007-06-04 18:16
银牌会员 发帖 636 积分 2,343
即使所有数据为0

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

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

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

还需要依靠其他的办法来做主判定
第6楼 lianjiang2004 发表于 2007-06-04 18:23
金牌会员 发帖 1,884 积分 3,946
Originally posted by qzwqzw at 2007-6-4 18:16:
即使所有数据为0

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

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

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

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


请教有何主判定法?
我想用的是一个保留扇区里的一个空闲扇区。
一般软件是不会用的,我想也无需保证将不会被用。呵呵,就像别人能用,我也能用,我想只要是还没用的就行吧。
第7楼 terse 发表于 2007-06-04 18:38
银牌会员 发帖 946 积分 2,404
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扇区不是空闲扇区。

请按任意键继续. . .
第8楼 lxmxn 发表于 2007-06-04 18:41
版主 发帖 4,938 积分 11,386
怎么会没有呢?

我这里测试正常。
第9楼 lianjiang2004 发表于 2007-06-04 18:52
金牌会员 发帖 1,884 积分 3,946
怪事,把8楼的拷贝进去,有值了。
第10楼 lianjiang2004 发表于 2007-06-04 18:55
金牌会员 发帖 1,884 积分 3,946
我想要的是有不为“ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 “的行才显示不是空闲扇区,怎么全是0,也显示不是空闲扇区了?我的批处理中哪里还有问题?
第11楼 lianjiang2004 发表于 2007-06-04 18:58
金牌会员 发帖 1,884 积分 3,946
知道了,要改成 if not "!sector!"==" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " goto sector_2c
第12楼 lianjiang2004 发表于 2007-06-04 19:01
金牌会员 发帖 1,884 积分 3,946
请教,为何开头部分一定要加上“SetLocal EnableDelayedExpansion”
以前用的类似批处理,没有也行的。就像1楼的批处理那样。
第13楼 lxmxn 发表于 2007-06-04 19:05
版主 发帖 4,938 积分 11,386
以“变量延迟”为关键字搜索一下。
第14楼 terse 发表于 2007-06-04 19:15
银牌会员 发帖 946 积分 2,404
拿掉第一个pause 更方便一点嘛
第15楼 lianjiang2004 发表于 2007-06-04 19:20
金牌会员 发帖 1,884 积分 3,946
因为批处理没通过,所以在差错,也就多了一些显示的地方。
发现那里变量无值,所以才来请求帮助的。解决了,当然要去掉无用信息,要结果即可。多谢。
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023