我有一个设置,其中有一个监视文件夹,其中包含要处理的文件夹。该应用程序擅长递归处理任何子文件夹中的文件,并将处理后的文件移动到最终位置,但它会留下空目录。
我希望运行一个 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%
)