我想批量调整一大堆使用ImageMagick的图像文件。我创建了一个Windows批处理文件,其中包含一个命令行参数(包括通配符)。该脚本应为每个指定的图像执行convert.exe(我已重命名为imconvert.exe)。FOR循环中的变量奇怪的输出
@echo off
setlocal EnableDelayedExpansion
set filename=%1
set file_part=%~nx1
set folder_part=%~dp1
if "%filename%" == "" (goto usage)
REM Create a new folder to put the resized ones in if it doesn't already exist
set newdir=%folder_part%resized\
echo %newdir%
if not exist %newdir% mkdir %newdir%
echo.
echo.
REM Now convert the files to 640 x 480
for /f %%f in (%filename%) do (
echo f
set image_file_name=%%~nxf
set path_and_filename=%newdir%%image_file_name%
echo %image_file_name%
echo %path_and_filename%
echo imconvert %%f -resize 640x480 -size 640x480 xc:black +swap -gravity center -composite %path_and_filename%
echo.
)
echo.
echo Images written to %newdir%
echo.
goto end
:usage
echo.
echo Usage: imconvert_640x480 folder\filename*.jpg
echo.
:end
当运行此命令:
C:> batchresize.bat d:\ temp目录* .JPG
我得到以下输出:
d:\ temp \ 79_DSC_0791.JPG resizedresized resized resize resizedDSC_0491.JPG d:\ temp \ resizedresizedresizedresizedresized resizedizedDSC_0491.JPG imconvert d:\ temp \ 79_D SC_0791.JPG调整大小640×480 640×480 -size XC:黑+交换 - 重心 - 复合d:\ TEMP \ resizedresizedresizedresizedresizedDSC_0491.JP ģ
d:\ TEMP \ DSC_0491.JPG resizedresizedresizedresizedDSC_0491.JPG d :\ TEMP \ resizedresizedresizedresizedresizedDSC_0491.JPG imconvert d:\ TEMP \ DSC_0491.JPG调整大小640×480 640×480 -size XC:黑+交换中心-gravity - 复合:\ TEMP \ resizedresizedresizedresizedresizedDSC_0491.JPG d:\ TEMP \ resizedDSC_0491.JPG
resizedresizedresizedresizedDSC_0491.JPG d:\ TEMP \ resizedresizedresizedresizedresizedDSC_0491.JPG imconvert d:\ TEMP \ resizedDSC_0491.JPG调整大小640×480 640×480 -size XC:黑+交换中心-gravity - 复合d:\ TEMP \ resizedresizedresizedresizedresizedDSC_0491.JPG
为什么我在文件名之前得到“resizedresizedresizedresizedized”?此外,为什么文件名不会在循环的每次迭代中更新?
http://ss64.com/nt/delayedexpansion.html最有可能 – 2015-09-04 05:11:51
@RC我已经把SETLOCAL EnableDelayedExpansion在顶部。似乎没有什么区别... –