![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 05:39 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 今天努力学习中,遇到个怪事 |
| 可打印版本 1,484 / 12 |
| 第1楼 nvflash | 发表于 2006-09-27 09:53 |
| 初级用户 发帖 38 积分 126 | |
|
今天努力学习中,遇到个怪事 我判断一个文件夹是否还有任何文件我先是这样写的
if exist .\files\*.* (echo 有文件 ) else ( echo 没有文件 ) 脚本不能正确执行 我只把扩展名那个*改成.doc就可以正常执行了,如下: if exist .\files\*.doc (echo 有WORD文件 ) else ( echo 没有WORD文件 ) 难道在这儿只有扩展名不能用通配符? |
|
| 第2楼 nvflash | 发表于 2006-09-27 09:54 |
| 初级用户 发帖 38 积分 126 | |
|
迫切想知道为什么
|
|
| 第3楼 vkill | 发表于 2006-09-27 10:12 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
我怎么试可以正确执行
|
|
| 第4楼 nvflash | 发表于 2006-09-27 10:15 |
| 初级用户 发帖 38 积分 126 | |
Originally posted by he200377 at 2006-9-27 10:12: 不行的,明明在文件夹里放了文件,批处理还是说没有文件 |
|
| 第5楼 namejm | 发表于 2006-09-27 10:40 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by nvflash at 2006-9-27 09:53: 其实,任何文件夹下都存在.和..两个目录,dir就可以查看得到了,所以用if exist *.* 来探测某个文件夹是否为空是行不通的。 探测文件夹是否为空可以采用如下代码: |
|
| 第6楼 redtek | 发表于 2006-09-28 00:05 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
”||“玩得漂亮~:)
|
|
| 第7楼 tangtai | 发表于 2006-09-28 03:46 |
| 等待验证用户 发帖 314 积分 640 | |
|
. 应该表示本目录
.. 表示上一级目录 |
|
| 第8楼 nvflash | 发表于 2006-09-29 03:29 |
| 初级用户 发帖 38 积分 126 | |
|
我觉得这个就有点不合理了,*.*顾名思义,只能表示文件本身啊,怎么又扯到文件夹去了?
再者,谁打开空文件夹都是知道此文件夹没有任何东东,而这儿的说法与广义的空文件夹不符,所以让人难以接受 |
|
| 第9楼 namejm | 发表于 2006-09-29 03:34 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by nvflash at 2006-9-29 03:29: 呵呵,不好意思,看走眼了,“文件夹”和“文件”只一字之差,我马虎了。 我想是因为你的表达有点含糊,然后我的理解又有所偏差,所以我才从文件扯到文件夹上去了。你在顶楼的原话是说“判断一个文件夹是否还有任何文件”,你的原意可能是说判断是否存在任意类型的文件(不包括文件夹),而因为你所说的“任何”二字,我就理解成了判断一个文件夹下是否还存在文件或者子文件夹。 我不知道空文件夹的准确定义如何,如果用 if exist *.* 的语句来判断某个文件夹下是否还有什么的话,因为每个文件夹下存在.这个表示本级目录和..这个表示上一级目录的东西(按照我的理解,..这个东西相当于父目录在本级目录的快敏方式),*.* 通配了任意文件名和后缀名的文件,同时也匹配了不含后缀名的文件夹名(请不要被点号及其之后的星号所迷惑,星号表示任意个字符的意思,0个也算),所以,这个语句的条件始终成立,会导致你的判断失误。 深入的理论分析,有待各路高手出马。 [ Last edited by namejm on 2006-9-29 at 03:53 ] |
|
| 第10楼 pengfei | 发表于 2006-09-29 05:30 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
IF exist语句是用来判断文件是否存在, 我想很可能if exist *.* 不会对文件是否存在做出判断, 它是通配任何文件. 只要最后一级目录存在就执行成功.
个人观点: if exist *.* 不会对文件是否存在做出判断. *.*为任何文件, 它总是返回0 (if exist *.* 实际就是判断文件夹是否存在). 而5楼的代码也还有一个情况没考虑进去, 如果文件夹下有子目录也会返回0. @echo off dir /a-d /b "要操作的文件夹"|findstr ".">nul && echo 该文件夹下还有其他文件 || echo 该文件夹是空的 pause 代码还可以改写为: @echo off dir /a-d /b "要操作的文件夹\*.*" >nul 2>nul && echo 存在文件. || echo 文件不存在. pause [ Last edited by pengfei on 2006-9-29 at 09:11 ] |
|
| 第11楼 nvflash | 发表于 2006-09-29 07:14 |
| 初级用户 发帖 38 积分 126 | |
|
真是个高手!
|
|
| 第12楼 pengfei | 发表于 2006-09-29 07:47 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
nvflash言过了, 我不过是随便分析而已, 谈不上什么技术可言. DOS联盟使我慢慢成长, 非常感谢各位好心人对我的帮助!
在这里我很快乐, 一种学习的快乐、帮助别人的快乐! |
|
| 第13楼 nvflash | 发表于 2006-09-29 08:18 |
| 初级用户 发帖 38 积分 126 | |
Originally posted by pengfei at 2006-9-29 07:47: 这也是我要说的话 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |