在文件夹中搜索音频扩展

在文件夹中搜索音频扩展

我正在尝试检查一个音频文件夹,其中不存在 mp3、flac 和 wav 扩展名。如果这三个都不存在,我会发送一条消息,提示文件夹中没有音频文件。

我使用在这篇文章中找到的 FOR 命令作为示例创建了一个批处理文件:
循环遍历文件夹中的文件

但是,当我运行批处理文件时,即使文件夹内有音频文件也会出现消息,请参阅下面的代码:

@echo off
chcp 65001
cls
ENDLOCAL
SETLOCAL ENABLEEXTENSIONS

For %%A In ("C:\Users\%username%\Desktop\Audio Folder\*.mp3" "C:\Users\%username%\Desktop\Audio Folder\*.flac" "C:\Users\%username%\Desktop\Audio Folder\*.wav") Do (
    (If Not Exist "%%~xA" Set "flag=MISSING")
)

set "ESC="
for /F %%d in ('echo prompt $E ^| cmd') do (set "ESC=%%d")

If Defined flag ( 
 SETLOCAL EnableExtensions DisableDelayedExpansion
 echo %ESC%[31mThere are no audio extensions in the folder! Exit and check which files are in the folder. (e=exit^)%ESC%[0m
 SETLOCAL EnableDelayedExpansion
 set /p r=
 IF /i "%r%"=="e" goto notfound 
)

:notfound
echo.
exit

我做了几次测试,但还是不行,不知道是不是 for 命令出了问题。如何检查文件夹并确认没有音频扩展名的文件?

答案1

您的 FOR 命令有缺陷。除了对每个文件执行之外,我不喜欢“如果不存在”这一部分。

这个(未经测试的)代码应该做得更好:

IF EXIST "C:\Users\%username%\Desktop\Audio Folder\*.mp3" SET "found=FOUND"
IF EXIST "C:\Users\%username%\Desktop\Audio Folder\*.flac" SET "found=FOUND"
IF EXIST "C:\Users\%username%\Desktop\Audio Folder\*.wav" SET "found=FOUND"

IF NOT DEFINED found (

答案2

我认为for循环在这里有点过头了。只需尝试列出文件并根据错误级别采取行动:

pushd "C:\Users\%username%\Desktop\Audio Folder\"
dir /b *.wav *.mp3 *.flac >nul 2>&1 && goto :found
popd
echo no files present
goto :eof
:found
popd
echo at least one audio file present.

&&作用为“如果前一个文件成功(找到文件)则”。如果您需要相反的操作,||则为“如果前一个命令失败(未找到文件)则”

相关内容