我想批量調整一大堆使用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在頂部。似乎沒有什麼區別... –