Board logo

标题: [讨论]批处理怎样判断一个文件夹是不是空文件夹? [打印本页]

作者: HAT     时间: 2008-8-19 21:18    标题: [讨论]批处理怎样判断一个文件夹是不是空文件夹?

收集判断一个文件夹(如C:\test\aaa)是不是空文件夹的方法。
抛砖引玉:
CODE:  [Copy to clipboard]
@echo off
set SrcFolder=C:\test\aaa
set flag=
if exist "%SrcFolder%" (
  for /f "tokens=*" %%a in ('dir /a /s /b "%SrcFolder%"') do set flag=%%a
    if "%flag%" neq "" (
    echo %SrcFolder%不是空文件夹
  ) else (
    echo %SrcFolder%是空文件夹
  )
)
CODE:  [Copy to clipboard]
@echo off
set SrcFolder=C:\test\aaa
if exist "%SrcFolder%" (
  rd "%SrcFolder%">nul 2>nul
  if exist "%SrcFolder%" (
    echo %SrcFolder%不是空文件夹
  ) else (
    echo %SrcFolder%是空文件夹
    md "%SrcFolder%">nul 2>nul
  )
)
2楼的思路:
CODE:  [Copy to clipboard]
@echo off
set SrcFolder=C:\test\aaa
if exist "%SrcFolder%" (
  for /f "delims=" %%a in ('dir /a /b "%SrcFolder%"') do (
    echo %SrcFolder%不是空文件夹
    goto :eof
  )
  echo %SrcFolder%是空文件夹
)
5楼的思路:
CODE:  [Copy to clipboard]
@echo off
set SrcFolder=C:\test\aaa
if exist "%SrcFolder%" (
  dir /a /b "%SrcFolder%"|findstr .*>nul&&echo.%SrcFolder%不是空文件夹||echo.%SrcFolder%是空文件夹
)
[ Last edited by HAT on 2008-8-30 at 11:21 AM ]
作者: slore     时间: 2008-8-19 21:54
@echo off
for /f "delims=" %%i in ('dir /b test') do echo 文件夹不为空&goto :End
echo 文件夹为空
:End
pause
作者: metoo     时间: 2008-8-19 22:10
投机总是那么有趣

  Quote:

  1. @echo off
  2. set SrcFolder=C:\test\aaa
  3. rd %SrcFolder% >nul && md %SrcFolder% && echo 目录是空的
  4. pause
        metoo发表于:  2008-08-19  21:55

[ Last edited by metoo on 2008-8-19 at 10:11 PM ]
作者: HAT     时间: 2008-8-19 22:20    标题: Re 3楼

当C:\test\aaa非空的时候,怎样输出:
C:\test\aaa不是空文件夹
作者: FQ     时间: 2008-8-20 09:06
一句话
CODE:  [Copy to clipboard]
dir/a/b <dirname>|findstr .* >nul&&echo,No空||echo.空的

作者: radem     时间: 2008-8-20 12:11


  Quote:
Originally posted by FQ at 2008-8-20 09:06 AM:
一句话
CODE:  [Copy to clipboard]
dir/a/b <dirname>|findstr .* >nul&&echo,No空||echo.空的

高!
作者: HAT     时间: 2008-8-20 20:10    标题: Re 2楼

如果dir没有/a参数的话,无法排除隐藏文件。
作者: HAT     时间: 2008-8-20 20:13
汗水,加分搞错楼层了,明天补回来吧。
作者: BC     时间: 2008-8-20 20:27
还真的不错哦,特别是5l的思路...
作者: 523066680     时间: 2008-8-20 20:41
判断目录大小是否为0也可以的吧

回复11楼
哈 经别人一问……如果里面存在零字节 那也算是文件啊 所以这个方法失败

[ Last edited by 523066680 on 2008-8-20 at 10:06 PM ]
作者: HAT     时间: 2008-8-20 20:49    标题: Re 10楼

你试试写个代码出来?
作者: BC     时间: 2008-8-20 20:52
问题是如何获得文件夹的大小吧
作者: 523066680     时间: 2008-8-20 21:59
@echo off
set n=1
for /f %%a in ('dir f:\a /b') do (set n=0)
if %n% equ 1 (echo,f:\a不存在文件) else (echo,f:\a存在文件)
pause
作者: metoo     时间: 2008-8-20 22:00


  Quote:
Originally posted by 523066680 at 2008-8-20 08:41 PM:
判断目录大小是否为0也可以的吧

不行。。文件夹始终返回为0
我前面那个不能处理有属性的文件夹。。还是dir最好了

[ Last edited by metoo on 2008-8-20 at 10:21 PM ]
作者: HAT     时间: 2008-8-21 12:02
13楼和2楼的思路类似
作者: knoppix7     时间: 2008-8-21 14:25
Rd "%~f1" 2>nul&&(Echo 目录为空&MD "%~f1")||(Echo 目录非空)
作者: qdloverr     时间: 2008-8-21 16:59
@echo off
set /a a=0
for /f "tokens=*" %%a in ('dir /b') do set /a a+=1
if %a% GTR 0 echo 不是空的&pause&exit
echo 是空的
pause

[ Last edited by qdloverr on 2008-8-21 at 05:19 PM ]
作者: knoppix7     时间: 2008-8-21 17:10
一堆DIR...
作者: picat     时间: 2008-8-21 17:17
我记得dos里专门有个命令或者参数判断文件夹是否为空的,一时想不起来,回去找找.
作者: 523066680     时间: 2008-8-21 17:37
这个也不错
attrib f:\a\
找不到文件 - F:\a\
-----------------------------------
dir f:\a /a-d |more +6
找不到文件
作者: kidzgy     时间: 2008-8-21 20:54
我觉得应该从判断这个文件夹的大小来出发
可是自己不会,我太弱了

嗯,可以在文件夹里建立一个空的记事本,这样就好比对了。

[ Last edited by kidzgy on 2008-8-21 at 08:56 PM ]
作者: 523066680     时间: 2008-8-22 07:27
[讨论]怎样判断一个文件夹是不是空文件夹?
要看题目,我开始也这么想 但是有人说了:文件夹如果大小为0 里面也不一定为空
                     1.畸形文件夹
                     2.空文件,即使是空文件,这个文件夹也不能算是空文件夹
作者: metoo     时间: 2008-8-22 07:34


  Quote:
Originally posted by 523066680 at 2008-8-22 07:27 AM:
[讨论]怎样判断一个文件夹是不是空文件夹?
要看题目,我开始也这么想 但是有人说了:文件夹如果大小为0 里面也不一定为空
                     1.畸 ...

先给文件夹去属性再rd应该可以。。。rd在有子文件(夹)的时候会自己显示“文件夹不是空的”空的直接被删除,重新md一个吧
作者: metoo     时间: 2008-8-22 07:40
CODE:  [Copy to clipboard]
@echo off
set SrcFolder=C:\test\aaa
attrib -r -s -a -h %SrcFolder% >nul 2>nul
rd \\?\%SrcFolder% >nul || md %SrcFolder% && echo 目录是空的
pause
rd 可以处理畸形文件,问题是attrib怎么处理?文件短名可以么?有空再试了,而且短名在attrib可以的话dir/a 应该也可以了。。麻烦,上班了,懒得研究了

[ Last edited by metoo on 2008-8-22 at 07:41 AM ]
作者: 523066680     时间: 2008-8-22 09:04
仔细研究起来真麻烦捏……我还是回家耕田吧

[ Last edited by 523066680 on 2008-8-22 at 12:18 PM ]
作者: knoppix7     时间: 2008-8-22 10:13
RD的方法16楼刚说完..
作者: radem     时间: 2008-8-22 12:19


  Quote:
Originally posted by HAT at 2008-8-20 08:13 PM:
汗水,加分搞错楼层了,明天补回来吧。

没错,在大哥的鼓励下,我会更努力的;)
作者: 523066680     时间: 2008-12-13 11:28
看了下老帖
好像可以这样
if  exist a\*.* echo have
作者: HAT     时间: 2008-12-13 17:15    标题: Re 28楼

好像?你测试的结果如何呢?
作者: kissbill     时间: 2008-12-13 20:49
CODE:  [Copy to clipboard]
@echo off
for /f "delims=" %%i in ('dir /b /a C:\test\aaa\*') do (
set m=%%i
if defined m (echo have&pause&goto :eof) else echo nohave
)
pause
老大们来看看这个。  当文件夹是空的时候,不输出nohave,怎么回事?
作者: ktv98     时间: 2008-12-14 22:28


  Quote:
『第 2 楼』:  

@echo off
for /f "delims=" %%i in ('dir /b test') do echo 文件夹不为空&goto :End
echo 文件夹为空
:End
pause  

我在  C:\test\aaa\下随便创建一个文件或文件夹

运行这个批处理却显示:

找不到文件
文件夹为空.为什么还加分
作者: HAT     时间: 2008-12-14 22:30    标题: Re 31楼

把@echo off删除
测试结果贴出来看看
作者: ktv98     时间: 2008-12-14 22:33


  Quote:
『第 32 楼』:  Re 31楼

把@echo off删除
测试结果贴出来看看


C:\Documents and Settings\Administrator\桌面\新建文件夹>for /F "delims=" %i in (
'dir /b test') do echo 文件夹不为空  & goto :End
找不到文件

C:\Documents and Settings\Administrator\桌面\新建文件夹>echo 文件夹为空
文件夹为空

C:\Documents and Settings\Administrator\桌面\新建文件夹>pause
请按任意键继续. . .

[ Last edited by ktv98 on 2008-12-14 at 22:35 ]
作者: HAT     时间: 2008-12-14 22:39    标题: Re 33楼

这还看不出问题所在?建议重新阅读基础教程中关于相对路径和绝对路径的讲解。




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5