4

まず、私はどこでも見ようとしましたが、失敗しました。私は経験が浅く、どんな助けにも感謝します。フォルダーをバッチファイルにドラッグするスクリプトを作成しようとしています。これにより、ImageMagick を使用して、そのフォルダー内のすべての画像が jpg に変換されます。コマンドラインでスクリプトを実行できる可能性が非常に高く、すべて正常に動作することがわかります。しかし、フォルダをドラッグすると問題が発生します。多くのファイルをスクリプトにドラッグすると、うまく変換されます。

convert %* %1.jpg

それはうまくいきます。フォルダーをドラッグすることもできます。これにより、内部の画像が変換されますが、次のように、フォルダーの名前を 1 つ上のディレクトリに変更します。

@set SOURCE=%1
convert %SOURCE%\* %SOURCE%.jpg

フォルダー内のすべてのファイルに対して変換を実行する for ループが必要だと思います。しかし、私は問題に遭遇しました。引用符をどこに置くか、どの変数を使用するか、スペースを克服する方法がわかりません。こんなことを想像して…

for %%f in (%SOURCE%\*) do ( convert %%f "%SOURCE%\%%f.jpg" )

しかし、ええ、私は途方に暮れています。私はこの小さなプロジェクトを試して、学習と、父が大量の写真をすばやく変換できるようにしています。

4

2 に答える 2

4

ImageMagick は複数の入力引数と 1 つの出力引数を取ることができるように思えますが、一度に 1 つのファイルで単純化するには、次のようにします。ループは正しく見えますが、以下の ~ 変更は引用符を処理します。

%%a* 一致を特定のファイルに変更して、既存の jpg または非画像ファイルをキャッチしないようにすることもできます。たとえば、%%f in (%%a*.png %%a*.gif) の場合です。行う ...

最後に、2 つの変換行の前に「echo」を追加して、テストを実行できるようにします。

@echo off

rem Loops through arguments. If a file converts it to a jpg.  If a directory
rem converts files in that directory to jpgs.  Assumes a program "convert".

set count=0
for %%a in (%*) do (
  if exist %%a (
    if exist %%a\ (
      rem Directory, loop through contents
      for %%f in (%%a\*) do (
        convert "%%f" "%%~a\%%~nf.jpg"
        set /a count+=1
      )
    ) else (
      rem File, just convert
      convert "%%~a" "%%~na.jpg"
      set /a count+=1
    )    
  ) else (
    echo Skipping non-existent %%~a
  )
)

echo Converted %count% files

pause
于 2012-06-09T11:44:50.473 に答える
1

あなたが望むものではありません。これにより、元のディレクトリ内に新しいディレクトリが作成され、変更された写真が次の場所に保存されます。

:: Create the new directory 
md %1\resized 

:: Resize and save the new version
for %%f in (%1\*.jpg) do ( convert "%%f" -thumbnail 800x800 "%1\resized\%%~nf.jpg" )
于 2012-06-09T12:44:05.807 に答える