中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求助一个小问题 上一主题 | 下一主题
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『楼 主』:  求助一个小问题

请问在DOS下怎么判断一个文件中的内容为空啊



http://www.msfans.net/bbs/
2005-1-20 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
红粟
初级用户




积分 130
发帖 8
注册 2004-12-5
状态 离线
『第 2 楼』:  

你是想查看文件是否为空,还是在程序中实现?前者可以 Dir 命令查看文件列表,0字节的就是空.后者可以先重置文件指针,再通过eof(f)=true实现

2005-1-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 3 楼』:  

我用Dir查看文件列表时发现空内容的文件的大小显示为0,而且“0”的左右都有空白,利用此特点,用两条命令就可做到:
dir xxxx.xxx | find " 0 " >nul
if errorlevel 0 echo xxxx.xxx is empty.
还可以做一个批处理以便判断:

  Quote:
@echo off
if not exist %1 goto none
dir %1 | find " 0 " >nul
if errorlevel 0 echo %1 is empty.
goto end
:none
echo %1 not found!
goto end
:end

将此批处理命名为empty.bat,运行empty xxx.xxx即可看到结果。

[此贴子已经被作者于2005-1-21 21:53:20编辑过]






----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-1-21 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

楼上的批处理是有错误的。第一,errorlevel的值要先判断是不是1。
第二,这个批处理不能用于NT环境。原因如下:
D:\>dir test.emp | find " 0 "
2005-01-22  16:00                 0 test.emp
               1 个文件              0 字节
               0 个目录  7,269,179,392 可用字节@echo off
if not exist %1 goto none
dir %1 | find " 0 " >nul
if  errorlevel 1 goto end
echo %1 is empty.
goto end
:none
echo %1 not found!
goto end
:end在NT环境下,批处理可以改成:
@echo off
if not exist %1 goto none
dir %1 | find /i " 0 %1" >nul
if  errorlevel 1 goto end
echo %1 is empty.
goto end
:none
echo %1 not found!
goto end
:end



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2005-1-22 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 5 楼』:  

呵呵,我是在Win98下写那个批处理的,还没试过在NT环境下调试。谢谢Climbing的指正!
另外在Win9x和DOS下还有小小不完善之处:dir显示列表的末尾可能会显示“ 0 dir(s)”,“0”和“dir”之间有一个空格,那么要判断的文件不管是否0字节还是根本不存在,FIND可能因为找到“ 0 dir(s)”而返回1。所以FIND那一句应把“ 0 ”增加两个空格:“  0  ”。

  Quote:
@echo off
if not exist %1 goto none
dir %1 | find "  0  " >nul
if  errorlevel 1 goto end
echo %1 is empty.
goto end
:none
echo %1 not found!
goto end
:end





----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-1-22 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 6 楼』:  

谢谢大家的帮助!!



http://www.msfans.net/bbs/
2005-1-24 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 7 楼』:  

怎么我试了不管是文件为不为空都显示XXX  is empty.啊




http://www.msfans.net/bbs/
2005-1-24 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 8 楼』:  



  Quote:
以下是引用chenhui530在2005-1-24 13:53:37的发言:
怎么我试了不管是文件为不为空都显示XXX  is empty.啊

从我的调试结果和你的问题来看,应该是Find这个命令返回值的问题。
也许楼主是在MSDOS 7.1或者Win2000/XP下运行的吧。我觉得新版本的FIND.COM的返回值有些问题,不管“找到”还是“没找到”,它都返回0,以致批处理中判断错误,总显示“XXX is empty.”但是Win98的FIND.EXE(其版本以及日期都比MSDOS 7.1的FIND.COM要低)则根据找到的结果返回不同值:找到则返回0,否则返回1。虽然它的功能不及新版本的强,但我建议楼主试试用Win98的FIND.EXE取代FIND.COM。



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-1-25 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: