我正在尝试检查一个音频文件夹,其中不存在 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.
&&
作用为“如果前一个文件成功(找到文件)则”。如果您需要相反的操作,||
则为“如果前一个命令失败(未找到文件)则”