递归检查文件夹以查看是否存在具有特定扩展名的文件

递归检查文件夹以查看是否存在具有特定扩展名的文件

我有一个设置,其中有一个监视文件夹,其中包含要处理的文件夹。该应用程序擅长递归处理任何子文件夹中的文件,并将处理后的文件移动到最终位置,但它会留下空目录。

我希望运行一个 cmd 提示符命令/批处理来扫描这些文件夹,然后如果它们是空的则执行某些操作(回显输出或创建一个 txt 文件),这样我们就知道处理已完成并清空了文件夹,而无需查看每个文件夹。

我尝试过的事情:

一句话:

if not exist "Folder\*.file" echo "not"

这几乎完全符合我的要求,但只有当文件直接位于该文件夹中且没有子文件夹时才有效。很多正在处理的文件夹只有几个子文件夹中的文件,因此在这种情况下测试失败。

接下来我修改了一个脚本这里接受文件夹名称作为参数:

echo off
echo 1: %1
setlocal enableDelayedExpansion
for /f %%i in ('dir /a:d /b /s D:\watch_folder\%1') do (
  set _dir=%%i
    echo _dir
  if exist !_dir!\*.file (
    echo .files exist here:  !_dir!
    ) else (
    echo No .files Here: !_dir!
    )
  )
endlocal

这再次几乎按预期工作 - 它将检查子文件夹并报告其中是否有文件,但是如果文件位于文件夹本身中而不是子文件夹中,它甚至不会检查它,它只检查子文件夹。

然后我注意到脚本的另一个问题 - 如果有两个子文件夹,一个没有特殊的.files,另一个有,它会报告一个为空,因此会触发“不存在”状态

所以我尝试扫描 watch_folder 本身(目录 /a:d /b /s D:\watch_folder)但这会扫描每个文件夹,而我并不想这样做。

tl;dr 问题:
我想以递归方式检查文件夹中具有特定扩展名的文件,这些文件可能在也可能不在随机命名的子文件夹中,并获取一个结果(而不是列表),即该树中是否存在符合条件的任何文件,使用此结果我想创建一个名为原始文件夹名称的文本文件,使得:

original-finished.txt

限制:命令行/批处理是首选,因为应用程序仅限于使用 comspec

编辑:刚想到一个问题 - 我可以做一个树状列表并以某种方式搜索文件扩展名吗(我想象一种类似于在 linux 中 grepping 输出的情况)

tree /F Folder | find /c ".file"

这将返回与树中任意位置匹配的所有文件的计数 - 如何将此输出推送到“if 0”类型的语句中?

我现在正在尝试这个:

for /f "delims=" %%a in ('tree /F D:\watchfolder\%1 | find /c ".mov"') do @set result=%%a
echo %result%

但它不喜欢我将树放入 find 中

答案1

终于明白了,多亏了这个帖子! (为了^|

@echo off
for /f "delims=" %%a in ('tree /F D:\watch_folder\%1 ^| find /c ".mov"') do @set result=%%a
if %result% == 0 (
    echo Finished > D:\watch_folder\%1.txt
) else (
    echo LOTS %result%
)

相关内容