2

私と別の人物は、ImageMagickコマンドを使用してさまざまな画像操作を実行するバッチファイルを共同で作成しようとしています。

動作するようになり、ハードドライブ上の別の場所に移動することにしました。突然、スクリプトが機能しなくなりました。

「変更された」フォルダが作成されますが、画像の変換は実行されません。コマンドプロンプトから変換コマンドを実行できますが、スクリプトを使用することはできません。

私はコンピューターを切り替えました、そしてしばらくしてそれは再び起こりました!

何が起こったのか分かりません。私はしようとしました:

  • 元の場所に戻します
  • ITクラウドのロイのアドバイスに従って、コンピューターを再起動します
  • ImageMagickを再インストールしました
  • IT神に祈った(多くの名前を持っているかもしれない:Gates、Jobs、Thorvald、nullなど)

まったく成功しません!役立つヒントを教えてください!

環境:

Windows764ビット

ImageMagick 6.8.0-6 Q16

バッチファイルの内容は次のとおりです。

@echo off
    :: Drag and drop a folder of images on the BAT-file.
    :: A 

    Setlocal enabledelayedexpansion

    :: Removes the last slash if given in argument %1
    Set "Dir=%~1"
    IF "%DIR:~-1%" EQU "\" (Set "Dir=%DIR:~0,-1%")

     :: Create the output folder if don't exist
        MKDIR ".\modified" 2>NUL

  :: Set maximium image height
  SET /A "newHeight=780"

  :: Set portrate extent width
  SET /A "portrateWidth=585"

    :: Read all the png and jpg images from the directory
    FOR %%f IN ("%dir%\*.tif" "%dir%\*.jpg") DO (

        :: Set the variable width to the image width
        For /F %%# in ('identify -ping -format "%%[fx:w]" "%%f"') Do (SET /A "width=%%#")

        :: Set the variable height to the image height
        For /F %%# in ('identify -ping -format "%%[fx:h]" "%%f"') Do (SET /A "height=%%#")

        :: Check if the photo is portrate or landscape and run the relavant code
        IF  !height! LSS !width!  (
            convert "%%f" -trim -resize x!newHeight! "modified\%%~nf.jpg"
        ) ELSE (

  :: Only resize if height is over 780
  IF  !height! LSS !newHeight! (

            :: Calculation for portrate extent width
            SET /A "newWidth=!height! * 3/4"
            convert "%%f" -trim -resize x!height! -background blue -gravity center -extent !newWidth!x!height! "modified\%%~nf.jpg"
  ) ELSE (
   convert "%%f" -trim -resize x!newHeight! -background blue -gravity center -extent !portrateWidth!x!newHeight! "modified\%%~nf.jpg"
   )
            )
        )

PAUSE&EXIT
4

2 に答える 2

0

括弧で囲まれている場合、set コマンドは機能しません。また、コメントの二重引用符の代わりに REM に変更されました。

@echo off
Setlocal enabledelayedexpansion

REM Drag and drop a folder of images on the BAT-file.
REM A 

REM Set directory to that of dragged file
Set Dir=%~dp1

REM Create the output folder if don't exist
MKDIR "%~dp0modified" 2>NUL

REM Set maximium image height
SET /A "newHeight=780"

REM Set portrate extent width
SET /A "portrateWidth=585"

REM Read all the png and jpg images from the directory
FOR %%f IN ("%Dir%*.tif" "%Dir%*.jpg") DO (

REM Set the variable width to the image width
For /F %%# in ('identify -ping -format "%%[fx:w]" "%%f"') Do (SET /A "width=%%#")

REM Set the variable height to the image height
For /F %%# in ('identify -ping -format "%%[fx:h]" "%%f"') Do (SET /A "height=%%#")

REM Check if the photo is portrate or landscape and run the relavant code
IF  !height! LSS !width!  (
    convert "%%f" -trim -resize x!newHeight! "%~dp0modified\%%~nf.jpg"
) ELSE (

REM Only resize if height is over 780
    IF  !height! LSS !newHeight! (
        REM Calculation for portrate extent width
        SET /A "newWidth=!height! * 3/4"
        convert "%%f" -trim -resize x!height! -background blue -gravity center -extent !newWidth!x!height! "%~dp0modified\%%~nf.jpg"
    ) ELSE (
        convert "%%f" -trim -resize x!newHeight! -background blue -gravity center -extent !portrateWidth!x!newHeight! "%~dp0modified\%%~nf.jpg"
        )
    )
)

PAUSE&EXIT
于 2013-04-29T06:54:31.633 に答える
0

バットファイルにドロップされたフォルダーはスラッシュで終わることはないため、その部分を削除できます。

これを試して:

@echo off
Setlocal enabledelayedexpansion

:: First of all sets the imagemagick directory!
PUSHD "C:\IMAGEMAGICK DIRECTORY"

:: Drag and drop a folder of images on the BAT-file.
:: A 

REM :: Removes the last slash if given in argument %1
REM Set "Dir=%~1"
REM IF "%DIR:~-1%" EQU "\" Set "Dir=%DIR:~0,-1%"

:: Create the output folder if don't exist
MKDIR "%~dp0modified" 2>NUL

:: Set maximium image height
SET /A "newHeight=780"

:: Set portrate extent width
SET /A "portrateWidth=585"

:: Read all the png and jpg images from the directory
FOR %%f IN ("%~1\*.tif" "%~1\*.jpg") DO (

    :: Set the variable width to the image width
    For /F %%# in ('identify -ping -format "%%[fx:w]" "%%f"') Do (SET /A "width=%%#")

    :: Set the variable height to the image height
    For /F %%# in ('identify -ping -format "%%[fx:h]" "%%f"') Do (SET /A "height=%%#")

    :: Check if the photo is portrate or landscape and run the relavant code
    IF  !height! LSS !width!  (
        convert "%%f" -trim -resize x!newHeight! "%~dp0modified\%%~nf.jpg"
    ) ELSE (

    :: Only resize if height is over 780
        IF  !height! LSS !newHeight! (
            :: Calculation for portrate extent width
            SET /A "newWidth=!height! * 3/4"
            convert "%%f" -trim -resize x!height! -background blue -gravity center -extent !newWidth!x!height! "%~dp0modified\%%~nf.jpg"
        ) ELSE (
            convert "%%f" -trim -resize x!newHeight! -background blue -gravity center -extent !portrateWidth!x!newHeight! "%~dp0modified\%%~nf.jpg"
        )
    )
)

PAUSE&EXIT
于 2012-11-25T16:23:52.870 に答える