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
我正在尝试使用 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