File 使用批处理脚本检查目录中是否存在任何类型的文件

File 使用批处理脚本检查目录中是否存在任何类型的文件,file,batch-file,directory,File,Batch File,Directory,您好,我想写一个批处理文件,以检查是否有任何类型的文件在给定的文件夹内 到目前为止,我已经尝试了以下方法 if EXIST FOLDERNAME\\*.* ( echo Files Exist ) ELSE ( echo "Empty" ) 我可以让它工作,如果我知道的文件扩展名,如txt文件与以下内容 if EXIST FOLDERNAME\\*.txt ( echo Files Exist ) ELSE ( echo "Empty" ) 谢谢你的帮助你可以用这个 @echo off f

您好,我想写一个批处理文件,以检查是否有任何类型的文件在给定的文件夹内

到目前为止,我已经尝试了以下方法

if EXIST FOLDERNAME\\*.* ( echo Files Exist ) ELSE ( echo "Empty" ) 
我可以让它工作,如果我知道的文件扩展名,如txt文件与以下内容

if EXIST FOLDERNAME\\*.txt ( echo Files Exist ) ELSE ( echo "Empty" )
谢谢你的帮助

你可以用这个

@echo off
for /F %%i in ('dir /b "c:\test directory\*.*"') do (
   echo Folder is NON empty
   goto :EOF
)
echo Folder is empty or does not exist
摘自


这应该可以满足您的需要。

检查文件夹是否至少包含一个文件

>nul 2>nul dir /a-d "folderName\*" && (echo Files exist) || (echo No file found)
>nul 2>nul dir /a-d /s "folderName\*" && (echo Files exist) || (echo No file found)
检查文件夹或其任何子代是否至少包含一个文件

>nul 2>nul dir /a-d "folderName\*" && (echo Files exist) || (echo No file found)
>nul 2>nul dir /a-d /s "folderName\*" && (echo Files exist) || (echo No file found)

检查文件夹是否至少包含一个文件或文件夹。
注意添加了
/a
选项以启用隐藏文件和系统文件/文件夹的查找


检查文件夹是否至少包含一个文件夹

dir /b /ad "folderName\*" | >nul findstr "^" && (echo Folders exist) || (echo No folder found)

对于目录中的文件,可以使用以下内容:

if exist *.csv echo "csv file found"


一个你自己的功能

使用
2nd
开关支持递归或不支持递归

另外,允许文件名带有
虽然是一个很好的答案,但被接受的答案无法解决这个问题

这个想法是从

代码中的注释

@echo off
title %~nx0
setlocal EnableDelayedExpansion
set dir=C:\Users\%username%\Desktop
title Echos folders and files in root directory...
call :FOLDER_FILE_CNT dir TRUE
echo !dir!
echo/ & pause & cls
::
:: FOLDER_FILE_CNT function by Ste
::
:: First Written:               2020.01.26
:: Posted on the thread here:   https://stackoverflow.com/q/10813943/8262102
:: Based on:                    https://ss64.com/nt/empty.html
::
:: Notes are that !%~1! will expand to the returned variable.
:: Syntax call: call :FOLDER_FILE_CNT "<path>" <BOOLEAN>
:: "<path>"   = Your path wrapped in quotes.
:: <BOOLEAN>  = Count files in sub directories (TRUE) or not (FALSE).
:: Returns a variable with a value of:
:: FALSE      = if directory doesn't exist.
:: 0-inf      = if there are files within the directory.
::
:FOLDER_FILE_CNT
if "%~1"=="" (
  echo Use this syntax: & echo call :FOLDER_FILE_CNT "<path>" ^<BOOLEAN^> & echo/ & goto :eof
  ) else if not "%~1"=="" (
  set count=0 & set msg= & set dirExists=
  if not exist "!%~1!" (set msg=FALSE)
  if exist "!%~1!" (
   if {%~2}=={TRUE} (
    >nul 2>nul dir /a-d /s "!%~1!\*" && (for /f "delims=;" %%A in ('dir "!%~1!" /a-d /b /s') do (set /a count+=1)) || (set /a count+=0)
    set msg=!count!
    )
   if {%~2}=={FALSE} (
    for /f "delims=;" %%A in ('dir "!%~1!" /a-d /b') do (set /a count+=1)
    set msg=!count!
    )
   )
  )
  set "%~1=!msg!" & goto :eof
  )
@echo关闭
标题%nx0
setlocal EnableDelayedExpansion
set dir=C:\Users\%username%\Desktop
标题回显根目录中的文件夹和文件。。。
调用:文件夹\u文件\u CNT dir TRUE
回声!迪尔!
回显/暂停和cls
::
::文件夹\u文件\u CNT功能由Ste提供
::
::初稿:2020.01.26
::发布在此处的线程上:https://stackoverflow.com/q/10813943/8262102
::基于:https://ss64.com/nt/empty.html
::
::请注意!%~1.将扩展到返回的变量。
::语法调用:调用:文件夹\u文件\u CNT“”
::“”=您的路径用引号括起来。
:=对子目录中的文件进行计数(TRUE)或不计数(FALSE)。
::返回值为的变量:
::FALSE=如果目录不存在。
::0-inf=如果目录中有文件。
::
:文件夹\u文件\u CNT
如果“%~1”==”“(
echo使用以下语法:&echo调用:文件夹\u文件\u CNT”“^&echo/&goto:eof
)否则,如果不是“%~1”==”(
set count=0&set msg=&set dirExists=
如果不存在“!%~1!”(设置msg=FALSE)
如果存在“!%~1!”(
如果{%~2}=={TRUE}(
>nul 2>nul dir/a-d/s“!%1!\*”&&(对于/f“delims=;”%%a in('dir“!%1!”/a-d/b/s')do(设置/a计数+=1))| |(设置/a计数+=0)
设置消息=!计数!
)
如果{%~2}=={FALSE}(
对于/f“delims=;”('dir“!%1!”/A-d/b)中的%%A,执行(设置/A计数+=1)
设置消息=!计数!
)
)
)
设置“%~1=!msg!”&goto:eof
)

这是什么巫术的可能复制品??!为什么要将重定向放在命令之前?
>nul 2>nul命令
command>nul 2>nul
之间有什么区别吗?@kitcar2000-这与以往没有什么区别。重定向可以出现在命令的开始、结束、甚至在命令的中间。kitcar2000根据命令的不同,可能会有细微的差异。例如,
>文件echo 12
将向
文件发送
12
和CR-LF
echo 1 2>文件
不会,因为
2>
被视为“重定向stderr”,而
echo 1 2>文件
将“工作”,但可能会添加不需要的空间。工作得很好。我把结尾改成了…&&(SET FOUND_FILE=1)| |(SET FOUND_FILE=0),因此我可以在以后的IF语句中使用它。这只有在文件类型的子集非常有限的情况下才有用;你肯定知道这一点;你知道那是什么。这是一个非常有限的解决方案。扩展名
.csv
不能保证条目是文件。没有任何东西可以阻止您使用
.csv
或任何其他扩展名创建目录。OP明确声明他们不想测试特定扩展名,而是要测试任何文件。
如果{%~1}=={}
将失败,当
%~1
有任何空格时。最好使用引号:
如果“%~1”==”
以避免语法错误。当文件以分号开头时失败
;Semi.txt
,它还计算目录,而不仅仅是固定的文件。当文件包含
时,接受的答案也有问题在开始处。如何解决这个问题?在这种情况下,
dir
命令甚至没有列出文件。修复了该问题。答案的历史记录将显示修复。感谢您指出这一点。我不明白为什么dbenham的答案会有任何问题,因为问题只发生在
for/F
中。顺便说一句,我不明白你的东西
>nul2>nuldir/a-d“!%~1!\*”&&
现在你只计算子目录中的文件,而基本目录中至少有一个文件。为什么需要
| |设置/a计数+0