中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 20:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:如何用批处理判断某一扇区为空闲扇区?
楼 主 请教:如何用批处理判断某一扇区为空闲扇区? 发表于 2007-06-04 16:58 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
请教:如何用批处理判断某一扇区为空闲扇区?

比如我用软件读取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 ]
Windows 一键还原
http://www.yjhy.com
2 发表于 2007-06-04 17:01 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
读出的“"%sector%”无值,不知何故。
Windows 一键还原
http://www.yjhy.com
3 发表于 2007-06-04 17:16 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
没有启用变量延迟。

在批处理的开始加上“SetLocal EnableDelayedExpansion”,再把%sector%改成!sector!试试,不行再跟帖讨论。
4 发表于 2007-06-04 17:20 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
还是无值。只是显示成 sector is "!sector!"。
Windows 一键还原
http://www.yjhy.com
5 发表于 2007-06-04 18:16 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
即使所有数据为0

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

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

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

还需要依靠其他的办法来做主判定
6 发表于 2007-06-04 18:23 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
Originally posted by qzwqzw at 2007-6-4 18:16:
即使所有数据为0

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

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

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

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


请教有何主判定法?
我想用的是一个保留扇区里的一个空闲扇区。
一般软件是不会用的,我想也无需保证将不会被用。呵呵,就像别人能用,我也能用,我想只要是还没用的就行吧。
Windows 一键还原
http://www.yjhy.com
7 发表于 2007-06-04 18:38 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
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 发表于 2007-06-04 18:41 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
怎么会没有呢?

我这里测试正常。

@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
9 发表于 2007-06-04 18:52 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
怪事,把8楼的拷贝进去,有值了。
Windows 一键还原
http://www.yjhy.com
10 发表于 2007-06-04 18:55 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
我想要的是有不为“ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 “的行才显示不是空闲扇区,怎么全是0,也显示不是空闲扇区了?我的批处理中哪里还有问题?
Windows 一键还原
http://www.yjhy.com
11 发表于 2007-06-04 18:58 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
知道了,要改成 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
12 发表于 2007-06-04 19:01 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
请教,为何开头部分一定要加上“SetLocal EnableDelayedExpansion”
以前用的类似批处理,没有也行的。就像1楼的批处理那样。
Windows 一键还原
http://www.yjhy.com
13 发表于 2007-06-04 19:05 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
以“变量延迟”为关键字搜索一下。
14 发表于 2007-06-04 19:15 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
拿掉第一个pause 更方便一点嘛
15 发表于 2007-06-04 19:20 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
UID 49283
性别 男
状态 离线
因为批处理没通过,所以在差错,也就多了一些显示的地方。
发现那里变量无值,所以才来请求帮助的。解决了,当然要去掉无用信息,要结果即可。多谢。
Windows 一键还原
http://www.yjhy.com
论坛跳转: