2012-12-26 46 views
1

我在我的批處理腳本中使用imagemagick來評估jpg和png文件的文件夾。我想檢查每幅圖像的打印尺寸,如果它符合我指定的標準,則輸出到文本文件。我的代碼不工作,我想如何。它會將所有數據輸出到文本文件,但前提是文件夾中的每個圖像都符合正確大小的條件。我希望它評估每個單獨的圖像。目前,如果有1個圖像不在標準內,則沒有任何內容寫入文本文件。如何使用批處理腳本評估文件夾中的每個文件

@echo off 

REM %f - filename 
REM %[size] - original size of image 
REM %W - page width 
REM %[resolution.x] - X density (resolution) without units 
REM %H - page height 
REM %[resolution.y] - Y density (resolution) without units 
REM \n - newline 
REM 1 in = 0.393701 cm - for PNG cm to in conversion 

set output="C:\Documents and Settings\mfishm000\Desktop\Image_size.txt" 

echo File_name:Size:Width:Height > %output% 

REM set width as variable 
FOR /F %%x IN ('identify -format "%%[fx:W/resolution.x]" *.jpg') DO SET width=%%x 
FOR /F %%x IN ('identify -format "%%[fx:W/resolution.x*0.393701]" *.png') DO SET width=%%x 

REM set height as variable 
FOR /F %%y IN ('identify -format "%%[fx:H/resolution.y]" *.jpg') DO SET height=%%y 
FOR /F %%y IN ('identify -format "%%[fx:H/resolution.y*0.393701]" *.png') DO SET height=%%y 

REM check if width is less than 8.67 and height is less than 11.22. If yes then output them to txt file 
IF %width% LSS 8.67 (
    IF %height% LSS 11.22 (
     identify -format "%%f:%%[size]:%%[fx:W/resolution.x]:%%[fx:H/resolution.y]\n" *.jpg >> %output% 
     identify -format "%%f:%%[size]:%%[fx:W/resolution.x*0.393701]:%%[fx:H/resolution.y*0.393701]\n" *.png >> %output% 
    ) 
) 

回答

2

認爲問題是你需要分別處理每個文件。看起來你最終只處理了最後一個文件的一個寬度/高度值。沒有測試過,但這應該工作。

@ECHO OFF 

    REM %f - filename 
    REM %[size] - original size of image 
    REM %W - page width 
    REM %[resolution.x] - X density (resolution) without units 
    REM %H - page height 
    REM %[resolution.y] - Y density (resolution) without units 
    REM \n - newline 
    REM 1 in = 0.393701 cm - for PNG cm to in conversion 

    set output="C:\Documents and Settings\mfishm000\Desktop\Image_size.txt" 

    echo File_name:Size:Width:Height > %output% 


    for /f %%a in ('dir /b ^| find ".jpg"') do call :processA "%%~a" 
    for /f %%a in ('dir /b ^| find ".png"') do call :processB "%%~a" 

    exit /B 

    :processA 
     FOR /F %%x IN ('identify -format "%%[fx:W/resolution.x]" %1') DO SET width=%%x 
     FOR /F %%y IN ('identify -format "%%[fx:H/resolution.y]" %1') DO SET height=%%y 
     IF %width% LSS 8.67 (
      IF %height% LSS 11.22 (
       identify -format "%%f:%%[size]:%%[fx:W/resolution.x]:%%[fx:H/resolution.y]\n" %1 >> %output% 
      ) 
     ) 
    goto:eof 

    :processB 
     FOR /F %%x IN ('identify -format "%%[fx:W/resolution.x*0.393701]" %1') DO SET width=%%x 
     FOR /F %%y IN ('identify -format "%%[fx:H/resolution.y*0.393701]" %1') DO SET height=%%y 
     IF %width% LSS 8.67 (
      IF %height% LSS 11.22 (
       identify -format "%%f:%%[size]:%%[fx:W/resolution.x*0.393701]:%%[fx:H/resolution.y*0.393701]\n" %1 >> %output% 
      ) 
     ) 
    goto:eof 
+0

這很好用,謝謝! – user1924977

相關問題