Board logo

标题: 如何判断目录是否为空? [打印本页]

作者: square007     时间: 2006-7-20 15:24    标题: 如何判断目录是否为空?

请问怎样判断目录是否为空呢?我写的批处理无论是否为空都显示存在文件,错在哪里? @ECHO OFF IF EXIST D:\UP\*.* ( ECHO 存在文件 ) ELSE ( ECHO 不存在文件 ) PAUSE

作者: namejm     时间: 2006-7-20 16:13
  这是因为任何一个文件夹下,都回存在.和..这两个目录,所以导致判断的失败。   下面的代码应该能满足你的要求:
@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

作者: bagpipe     时间: 2006-7-20 16:37
我也发一个玩玩 @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 此文件夹不为空或者存在空文件夹

作者: zh159     时间: 2006-7-20 17:28
简化一下 bagpipe 的:
@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 ]

作者: bagpipe     时间: 2006-7-20 17:30
我的妈呀,这也叫简化

作者: zh159     时间: 2006-7-20 17:33
Originally posted by bagpipe at 2006-7-20 17:30: 我的妈呀,这也叫简化
简化一行再减几个字 再来一次:
@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 ]

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

作者: bagpipe     时间: 2006-7-22 11:16
哦,确实是这样,不过没有DELIMS= 也应该可以,因为FOR是以空格为默认分隔符号的,是我晕菜了........... [ Last edited by bagpipe on 2006-7-22 at 16:03 ]

作者: zh159     时间: 2006-7-22 15:11
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 ]

作者: square007     时间: 2006-7-25 10:25
哇,真是高手如云阿,长见识拉。

作者: square007     时间: 2006-7-25 10:30
@echo off dir /a /b "要查找的文件夹"|findstr .>nul 2>nul && echo 有文件 || echo 没有文件 这个东西看不懂,那位给解释一下呢?

作者: xycoordinate     时间: 2007-3-7 23:12
(dir /a /b "要查找的文件夹"|findstr .>nul 2>nul )&&( echo 有文件 || echo 没有文件) |:管道 .:findstr中的特殊字符,代表所有字符,详见findstr /? &&:A&&B,A成功,执行B ||:A||B,A不成功,执行B

作者: ruisoft     时间: 2007-3-20 08:06
findstr .>nul 2>nul 中的>nul 2>nul 的解释?

作者: lxmxn     时间: 2007-3-20 23:27
Originally posted by ruisoft at 2007-3-19 19:06: findstr .>nul 2>nul 中的>nul 2>nul 的解释?
  简单的讲就是屏蔽屏幕的输出。如果想看具体的讲解,可以在搜索一下 willsort 的讲解。

作者: abc999111     时间: 2007-3-21 03:37    标题: exit