中国DOS联盟论坛

中国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:
我判断一个文件夹是否还有任何文件我先是这样写的

if exist .\files\*.* (echo 有文件
) else (
echo 没有文件
)

脚本不能正确执行

  其实,任何文件夹下都存在.和..两个目录,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:
nvflash言过了, 我不过是随便分析而已, 谈不上什么技术可言. DOS联盟使我慢慢成长, 非常感谢各位好心人对我的帮助!

在这里我很快乐, 一种学习的快习...


这也是我要说的话
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023