使用批处理命令检查文件夹是否为空?

9
for /F %%i in ('dir /b "C:\Program Files\Apache folder\*.*"') do (
   echo Folder is NON empty
   goto launch_app
)
  • 如何检查文件夹是否为空?

    我尝试了上面的命令,但它没有起作用。


参见 https://dev59.com/CqDia4cB1Zd3GeqPLOdR#43409248 - KaFreDis
这里可以看到一种更短、更简单的方法: https://dev59.com/CqDia4cB1Zd3GeqPLOdR#43409248 - KaFreDis
5个回答

12

试试这个:

for /F %%i in ('dir /b /a "C:\Program Files\Apache folder\*"') do (
    echo if you see this the folder is NOT empty
    goto launch_app
)

系统找不到指定的路径。我在那个位置有Apache文件夹。在Apache文件夹里面,我还有一个文件夹。但是仍然出现错误。 - Bobby Rachel
要检查更多的文件夹,请从“dir”中删除“-d”选项。 - Endoro
我尝试删除 -d,但仍然显示系统找不到指定的路径。 - Bobby Rachel

3

我并不满意给出的答案,因为我尽可能避免使用for循环、goto和临时文件。

检查文件夹是否为空:

dir /b /s /a "C:\Program Files\Apache folder\" | findstr .>nul || (
  echo Folder is empty
)

检查文件夹是否为空:

dir /b /s /a "C:\Program Files\Apache folder\" | findstr .>nul && (
  echo Folder is NOT empty
)

2

文件未找到

@for /f "tokens=*" %%a in ('dir /b /a-d "C:\Progra~1\Apache"') do @...

当您运行此命令时看到的错误,来自标准错误输出。但这只是在您的控制台上打印的警告。当出现这种情况时,迭代的主体将不会被评估,而基于“for/dir”指令的算法实际上是正确的。
现在,如果您想摆脱这个丑陋的错误消息,您需要将以下内容添加到您的脚本中,以便将标准错误重定向到null设备:
2>NUL

例如,在批处理文件中,使用适当的转义字符:
@rem Print a list of file paths
@for /f "tokens=*" %%a in ('dir /b /a-d "%srcPath%" 2^>NUL') do @echo(%srcPath%\%%a

1
@echo off
cls
echo.
echo.
echo.
echo                  TEST FOR EMPTY DIRECTORY
echo             was tested with "&" without a file
echo.
echo              Can use Full or Subfolder path
echo               (as below) of where test.bat
echo.
    set p=Raw\
echo.
echo                  Just to show p is set
echo.
echo                       "p=%p%"
echo.
echo.
echo.
pause

for /F %%i in ('dir /b /a "%p%*"') do (
    echo Folder %p% was NOT empty
    goto :process
)
    echo Folder %p% was empty 



:process
    echo "BLAH, BLAH, BLAH "
:end
    pause
    exit
rem Copy past in notepad to try. "Create and use or change the "raw" to your own fancy."
rem Hope this helps. Works great for me and I use it.
rem Have Fun.
rem Note use go to end next line after was empty. Worked great in w10. (this program hmm)
rem IF IT WORKS FOR YOU . GIVE A +. THX!

在重新查看了这个网站之后,我使用了Endoro的代码4-19-13并稍作修改。因此,非常感谢Endoro和他的贡献。 - RHSR

0
dir C:\TEST\*.* /a/b/d/od>C:\TEMP\CHECKFOLDER
for /R C:\TEMP\ %%? in (CHECKFOLDER) do (
 if "%%~z?"=="0" (
  ECHO Folder is empty.
 ) ELSE (
  ECHO Folder is NOT empty
 )
)

1
仅提供代码的答案几乎总是可以通过添加一些解释来改进,以便更好地说明它们的工作原理和原因。 - Suraj Kumar
3
欢迎来到 Stack Overflow!虽然这段代码可能解决了问题,但是包括一个解释关于如何以及为什么这样解决问题将会真正帮助提高您的帖子质量,并且很可能会得到更多的赞成票。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案,添加解释并给出适用的限制和假设。 - double-beep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接