中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 今天努力学习中,遇到个怪事
作者:
标题: 今天努力学习中,遇到个怪事 上一主题 | 下一主题
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『楼 主』:  今天努力学习中,遇到个怪事 使用 LLM 解释/回答一下

我判断一个文件夹是否还有任何文件我先是这样写的

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

脚本不能正确执行

我只把扩展名那个*改成.doc就可以正常执行了,如下:

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

难道在这儿只有扩展名不能用通配符?


2006-9-27 09:53
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

迫切想知道为什么


2006-9-27 09:54
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

我怎么试可以正确执行


2006-9-27 10:12
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

Originally posted by he200377 at 2006-9-27 10:12:
我怎么试可以正确执行

不行的,明明在文件夹里放了文件,批处理还是说没有文件


2006-9-27 10:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

Originally posted by nvflash at 2006-9-27 09:53:
我判断一个文件夹是否还有任何文件我先是这样写的

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

脚本不能正确执行

  其实,任何文件夹下都存在.和..两个目录,dir就可以查看得到了,所以用if exist *.* 来探测某个文件夹是否为空是行不通的。

  探测文件夹是否为空可以采用如下代码:

@echo off
dir /a /b "要操作的文件夹"|findstr ".">nul && echo 该文件夹下还有其他文件 || echo 该文件夹是空的
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-27 10:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

”||“玩得漂亮~:)


2006-9-28 00:05
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
tangtai
高级用户




积分 640
发帖 314
注册 2006-8-13
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

. 应该表示本目录
.. 表示上一级目录


2006-9-28 03:46
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

我觉得这个就有点不合理了,*.*顾名思义,只能表示文件本身啊,怎么又扯到文件夹去了?
再者,谁打开空文件夹都是知道此文件夹没有任何东东,而这儿的说法与广义的空文件夹不符,所以让人难以接受


2006-9-29 03:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

Originally posted by nvflash at 2006-9-29 03:29:
我觉得这个就有点不合理了,*.*顾名思义,只能表示文件本身啊,怎么又扯到文件夹去了?
再者,谁打开空文件夹都是知道此文件夹没有任何东东,蠮..

  呵呵,不好意思,看走眼了,“文件夹”和“文件”只一字之差,我马虎了。

  我想是因为你的表达有点含糊,然后我的理解又有所偏差,所以我才从文件扯到文件夹上去了。你在顶楼的原话是说“判断一个文件夹是否还有任何文件”,你的原意可能是说判断是否存在任意类型的文件(不包括文件夹),而因为你所说的“任何”二字,我就理解成了判断一个文件夹下是否还存在文件或者子文件夹。

  我不知道空文件夹的准确定义如何,如果用 if exist *.* 的语句来判断某个文件夹下是否还有什么的话,因为每个文件夹下存在.这个表示本级目录和..这个表示上一级目录的东西(按照我的理解,..这个东西相当于父目录在本级目录的快敏方式),*.* 通配了任意文件名和后缀名的文件,同时也匹配了不含后缀名的文件夹名(请不要被点号及其之后的星号所迷惑,星号表示任意个字符的意思,0个也算),所以,这个语句的条件始终成立,会导致你的判断失误。

  深入的理论分析,有待各路高手出马。

Last edited by namejm on 2006-9-29 at 03:53 ]




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-29 03:34
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

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 ]


2006-9-29 05:30
查看资料  发送邮件  发短消息  网志  OICQ (573381312)  编辑帖子  回复  引用回复
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

真是个高手!


2006-9-29 07:14
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

nvflash言过了, 我不过是随便分析而已, 谈不上什么技术可言. DOS联盟使我慢慢成长, 非常感谢各位好心人对我的帮助!

在这里我很快乐, 一种学习的快乐、帮助别人的快乐!


2006-9-29 07:47
查看资料  发送邮件  发短消息  网志  OICQ (573381312)  编辑帖子  回复  引用回复
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

Originally posted by pengfei at 2006-9-29 07:47:
nvflash言过了, 我不过是随便分析而已, 谈不上什么技术可言. DOS联盟使我慢慢成长, 非常感谢各位好心人对我的帮助!

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


这也是我要说的话


2006-9-29 08:18
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: