中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何判断目录是否为空? 上一主题 | 下一主题
square007
初级用户





积分 26
发帖 7
注册 2006-7-17
状态 离线
『楼 主』:  如何判断目录是否为空?

请问怎样判断目录是否为空呢?我写的批处理无论是否为空都显示存在文件,错在哪里?


@ECHO OFF

IF EXIST D:\UP\*.* (
   ECHO 存在文件
) ELSE (
   ECHO 不存在文件
)


PAUSE

2006-7-20 15:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  这是因为任何一个文件夹下,都回存在.和..这两个目录,所以导致判断的失败。

  下面的代码应该能满足你的要求:
@echo off
if exist tmp.txt del /q tmp.txt
for /f %%i in ('dir /a /b d:\up') do echo %%i>>tmp.txt
if exist tmp.txt (echo 存在文件) else (echo 不存在文件)
if exist tmp.txt del /q tmp.txt
pause


2006-7-20 16:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 3 楼』:  

我也发一个玩玩
@echo off
setlocal
set /p k=要测试的文件夹路径:
if not exist "%k%\." echo 此文件夹不存在&&goto :eof
for /f "tokens=1 delims=个目录" %%a in ('dir /a "%k%"^|findstr "个目录"') do set a=%%a
for /f "tokens=1 delims=个文件" %%b in ('dir /a "%k%"^|findstr "个文件"') do set b=%%b
if "%b: =%"=="0" if "%a: =%"=="2" echo 此文件夹为空&&goto :eof
echo 此文件夹不为空或者存在空文件夹

2006-7-20 16:37
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

简化一下 bagpipe 的:

  Quote:
@echo off
setlocal
if not exist "%1\." echo 此文件夹不存在&&goto :eof
for /f "tokens=1 delims= " %%a in ('dir /a "%1"^|findstr "个目录"') do set a=%%a
for /f "tokens=1 delims= " %%b in ('dir /a "%1"^|findstr "个文件"') do set b=%%b
if "%b%%a%"=="02" echo 此文件夹为空&&goto :eof
echo 此文件夹不为空或者存在空文件夹

执行:批处理 要测试的文件夹路径(空格隔开)

[ Last edited by zxcv on 2006-7-20 at 17:43 ]

2006-7-20 17:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 5 楼』:  

我的妈呀,这也叫简化

2006-7-20 17:30
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-20 17:30:
我的妈呀,这也叫简化

简化一行再减几个字

再来一次:

  Quote:
@echo off
setlocal
if not exist "%1\." echo 此文件夹不存在&&goto :eof
for /f "tokens=1 delims= " %%a in ('dir /a "%1"^|findstr "个目录"') do (
for /f "tokens=1 delims= " %%b in ('dir /a "%1"^|findstr "个文件"') do (
if "%%a%%b"=="20" echo 此文件夹为空&&goto :eof))
echo 此文件夹不为空或者存在空文件夹



[ Last edited by zxcv on 2006-7-20 at 17:42 ]

2006-7-20 17:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 7 楼』:  

  我来个更简洁的:
@echo off
dir /a /b "要查找的文件夹"|findstr .>nul 2>nul && echo 有文件 || echo 没有文件
pause
[ Last edited by namejm on 2006-7-22 at 13:31 ]

2006-7-22 11:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 8 楼』:  

哦,确实是这样,不过没有DELIMS= 也应该可以,因为FOR是以空格为默认分隔符号的,是我晕菜了...........

[ Last edited by bagpipe on 2006-7-22 at 16:03 ]

2006-7-22 11:16
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by bagpipe at 2006-7-22 11:16:
其实我一直都不想说,怕伤害了zxcv,他给俺简化的绝对不成,呵呵.......

if "%b: =%"=="0" if "%a: =%"=="2" echo 此文件夹为空& ...

关键是“delims= ”一句(=号后面是空格),会自动清除你这句:
for /f "tokens=1 delims=个目录" %%a in ('dir /a "%k%"^|findstr "个目录"') do set a=%%a
获取的2之前的所有空格,只剩下2,所以用不着"%b: =%"去除空格

不信的话你可以试试我的:D

[ Last edited by zxcv on 2006-7-22 at 15:16 ]

2006-7-22 15:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
square007
初级用户





积分 26
发帖 7
注册 2006-7-17
状态 离线
『第 10 楼』:  

哇,真是高手如云阿,长见识拉。

2006-7-25 10:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
square007
初级用户





积分 26
发帖 7
注册 2006-7-17
状态 离线
『第 11 楼』:  

@echo off
dir /a /b "要查找的文件夹"|findstr .>nul 2>nul && echo 有文件 || echo 没有文件

这个东西看不懂,那位给解释一下呢?

2006-7-25 10:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 12 楼』:  

(dir /a /b "要查找的文件夹"|findstr .>nul 2>nul )&&( echo 有文件 || echo 没有文件)

|:管道
.:findstr中的特殊字符,代表所有字符,详见findstr /?
&&:A&&B,A成功,执行B
||:A||B,A不成功,执行B

2007-3-7 23:12
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子  回复  引用回复
ruisoft
初级用户





积分 93
发帖 57
注册 2007-3-12
状态 离线
『第 13 楼』:  

findstr .>nul 2>nul

中的>nul 2>nul

的解释?

2007-3-20 08:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by ruisoft at 2007-3-19 19:06:
findstr .>nul 2>nul

中的>nul 2>nul

的解释?


  简单的讲就是屏蔽屏幕的输出。如果想看具体的讲解,可以在搜索一下 willsort 的讲解。


2007-3-20 23:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abc999111
新手上路





积分 4
发帖 1
注册 2007-3-21
状态 离线
『第 15 楼』:  exit






2007-3-21 03:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: