中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:如何用批处理判断某一扇区为空闲扇区?
« [1] [2] »
作者:
标题: 请教:如何用批处理判断某一扇区为空闲扇区? 上一主题 | 下一主题
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『楼 主』:  请教:如何用批处理判断某一扇区为空闲扇区?

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

比如我用软件读取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 ]



Windows 一键还原
http://www.yjhy.com
2007-6-4 16:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 2 楼』:  

读出的“"%sector%”无值,不知何故。



Windows 一键还原
http://www.yjhy.com
2007-6-4 17:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  

没有启用变量延迟。

在批处理的开始加上“SetLocal EnableDelayedExpansion”,再把%sector%改成!sector!试试,不行再跟帖讨论。

2007-6-4 17:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 4 楼』:  

还是无值。只是显示成 sector is "!sector!"。



Windows 一键还原
http://www.yjhy.com
2007-6-4 17:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 5 楼』:  

即使所有数据为0

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

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

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

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

2007-6-4 18:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 6 楼』:  



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

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

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

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

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

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



Windows 一键还原
http://www.yjhy.com
2007-6-4 18:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 7 楼』:  



  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扇区不是空闲扇区。

请按任意键继续. . .

2007-6-4 18:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  

怎么会没有呢?

我这里测试正常。
@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


2007-6-4 18:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 9 楼』:  

怪事,把8楼的拷贝进去,有值了。



Windows 一键还原
http://www.yjhy.com
2007-6-4 18:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 10 楼』:  

我想要的是有不为“ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 “的行才显示不是空闲扇区,怎么全是0,也显示不是空闲扇区了?我的批处理中哪里还有问题?



Windows 一键还原
http://www.yjhy.com
2007-6-4 18:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 11 楼』:  

知道了,要改成 if not "!sector!"==" 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " goto sector_2c



Windows 一键还原
http://www.yjhy.com
2007-6-4 18:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 12 楼』:  

请教,为何开头部分一定要加上“SetLocal EnableDelayedExpansion”
以前用的类似批处理,没有也行的。就像1楼的批处理那样。



Windows 一键还原
http://www.yjhy.com
2007-6-4 19:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 13 楼』:  

以“变量延迟”为关键字搜索一下。

2007-6-4 19:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 14 楼』:  

拿掉第一个pause  更方便一点嘛

2007-6-4 19:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 15 楼』:  

因为批处理没通过,所以在差错,也就多了一些显示的地方。
发现那里变量无值,所以才来请求帮助的。解决了,当然要去掉无用信息,要结果即可。多谢。



Windows 一键还原
http://www.yjhy.com
2007-6-4 19:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: