批处理脚本获取文件名及添加扩展名问题求助
批处理脚本变量与路径生成问题解决
问题根源与解决要点
- 循环变量引用错误:你的
for循环定义的变量是%%i,但调用magick convert时误用了%%f,导致无法定位文件,需统一改为%%i。 - 未启用延迟扩展:批处理解析
for代码块时会一次性展开所有%变量%,循环内设置的file_name无法通过%file_name%获取实时值。需在脚本开头添加setlocal enabledelayedexpansion开启延迟扩展,之后用!变量名!引用循环内变量。 - 变量赋值冗余引号:
set file_name="%%~nxi"会把引号存入变量,后续拼接路径会生成无效格式,应改为set file_name=%%~nxi。 - 目标路径写法修正:开启延迟扩展后,正确路径写法为
"%png_folder%\!file_name!.png";若无需保留原文件扩展名,可直接用"%png_folder%\%%~ni.png"(%%~ni仅提取不含扩展名的文件名)。
修正后完整代码
@echo off setlocal enabledelayedexpansion set png_folder=PNG set jpg_folder=JPG for /f "delims=" %%i in ('dir /b "%jpg_folder%"') do ( set file_name=%%~nxi magick convert "%jpg_folder%\%%i" "%png_folder%\!file_name!.png" ) pause endlocal
简化写法(无需额外变量)
若仅需将原文件转换为PNG格式,可省略file_name变量直接拼接路径:
@echo off set png_folder=PNG set jpg_folder=JPG for /f "delims=" %%i in ('dir /b "%jpg_folder%"') do ( magick convert "%jpg_folder%\%%i" "%png_folder%\%%~ni.png" ) pause
内容的提问来源于stack exchange,提问作者Quark-Coder
相关产品推荐
相关产品推荐

