楼 主
求助一个小问题
发表于 2005-01-20 00:00 · 中国 浙江 杭州 电信
高级用户
★★
积分 772 发帖 273 注册 2004-10-23 00:00 21年会员 UID 32861 性别 男
状态 离线
请问在DOS下怎么判断一个文件中的内容为空啊
http://www.msfans.net/bbs/
第 2 楼
发表于 2005-01-21 00:00 · 中国 广东 东莞 电信
初级用户
★
积分 130 发帖 8 注册 2004-12-05 00:00 21年会员 UID 34355 性别 男
状态 离线
你是想查看文件是否为空,还是在程序中实现?前者可以 Dir 命令查看文件列表,0字节的就是空.后者可以先重置文件指针,再通过eof(f)=true实现
第 3 楼
发表于 2005-01-21 00:00 · 中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562 发帖 1,883 注册 2004-01-19 00:00 22年会员 UID 15812 性别 男 来自 广东广州
状态 离线
我用Dir查看文件列表时发现空内容的文件的大小显示为0,而且“0”的左右都有空白,利用此特点,用两条命令就可做到:
dir xxxx.xxx | find " 0 " >nul
if errorlevel 0 echo xxxx.xxx is empty.
还可以做一个批处理以便判断:
@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即可看到结果。
----====≡≡≡≡ 我的至爱,永远是
MSDOS !≡≡≡≡====----
第 4 楼
发表于 2005-01-22 00:00 · 中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962 发帖 2,753 注册 2003-04-16 00:00 23年会员 UID 1565 性别 男 来自 河北保定
状态 离线
楼上的批处理是有错误的。第一,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
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“
这个帖子 ”和“
这个帖子 ”并努力遵守,如果可能,请告诉更多的人!
第 5 楼
发表于 2005-01-22 00:00 · 中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562 发帖 1,883 注册 2004-01-19 00:00 22年会员 UID 15812 性别 男 来自 广东广州
状态 离线
呵呵,我是在Win98下写那个批处理的,还没试过在NT环境下调试。谢谢Climbing的指正!
另外在Win9x和DOS下还有小小不完善之处:dir显示列表的末尾可能会显示“ 0 dir(s)”,“0”和“dir”之间有一个空格,那么要判断的文件不管是否0字节还是根本不存在,FIND可能因为找到“ 0 dir(s)”而返回1。所以FIND那一句应把“ 0 ”增加两个空格:“ 0 ”。
@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 !≡≡≡≡====----
第 6 楼
发表于 2005-01-24 00:00 · 中国 浙江 杭州 电信
高级用户
★★
积分 772 发帖 273 注册 2004-10-23 00:00 21年会员 UID 32861 性别 男
状态 离线
谢谢大家的帮助!!
http://www.msfans.net/bbs/
第 7 楼
发表于 2005-01-24 00:00 · 中国 浙江 杭州 电信
高级用户
★★
积分 772 发帖 273 注册 2004-10-23 00:00 21年会员 UID 32861 性别 男
状态 离线
怎么我试了不管是文件为不为空都显示XXX is empty.啊
http://www.msfans.net/bbs/
第 8 楼
发表于 2005-01-25 00:00 · 中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562 发帖 1,883 注册 2004-01-19 00:00 22年会员 UID 15812 性别 男 来自 广东广州
状态 离线
以下是引用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 !≡≡≡≡====----
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正