Windows 批处理:在 for 循环中查找包含另一个字符串的字符串

Windows batch : find string contains another string inside a for loop

我正在尝试使用 cwebp 编码器将一组 PNG 图像转换为 WEBP 图像。 我设法使用 JAVA 程序完成了它,但现在我想编写一个批处理文件来完成这项任务。 经过一些搜索,我已经得到 metal03326's solution。 但是我想要一个修改,应该跳过 9 个补丁图像。

这是我所做的:

pushd %1

set "DOTNINE=.9"

echo %DOTNINE%

for /f "delims=" %%n in ('dir /b /s /a-d-h-s') do (

set MY=%%~nn

set MY=%MY:~-2%

rem IF NOT ".webp" == "%%~xn" IF NOT "MY" == ".9" ("%~dp0cwebp.exe" -q 80 "%%n" -o "%%n.webp") ELSE (echo File already WEBP.)

)

popd

但是我遇到语法错误。上面的代码有什么问题?

要在循环中多次重新分配变量(即 MY),您必须使用 delayed expansion:

setlocal enableDelayedExpansion
pushd "%~1"
for /f "delims=" %%n in ('dir /b /a-d-h-s') do (
    set MY=%%~nn
    set MY=!MY:~-2!
    IF NOT ".webp" == "%%~xn" IF NOT "!MY!" == ".9" ("%~dp0cwebp.exe" -q 80 "%%n" -o "%%n.webp") ELSE (echo File already WEBP.)
)
popd