2012-06-09 93 views
2

首先,我試圖尋找無處不在,並且不成功。我沒有經驗,很感激任何幫助。我試圖編寫一個腳本將文件夾拖到批處理文件上,然後該文件將使用ImageMagick將該文件夾中的所有圖像轉換爲jpgs。我可以看到它很可能在命令行上執行該腳本,所有工作正常。但拖動文件夾是給我的問題。我可以拖動很多文件到腳本上,並且它可以很好地轉換:批處理腳本拖放文件夾與ImageMagick轉換圖像

convert %* %1.jpg 

很好用。我還可以拖動一個文件夾,然後將圖像轉換中,但隨後重新命名爲文件夾的名稱,一個目錄更高,像這樣:

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

我想我需要一個for循環執行轉換文件夾中的每個文件。但我遇到了問題。我不確定在哪裏放置引號,以及要使用哪些變量以及如何克服空間。我想這樣的事情...

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

但是,是的,我很茫然。我正在嘗試這個小項目來學習,並且幫助我的父親快速地轉換他的大量照片。

+0

哦不!有人回答,但與遞歸的答案,現在它已經消失:( 有沒有人有任何想法如何修改羅德尼的腳本添加遞歸?對不起,如果我問了這個錯誤的地方。我知道它是與/ R開關,但不能完全得到它的發生... – Luke

回答

3

聽起來像ImageMagick可以接受多個輸入參數和一個輸出參數,但一次只能用一個文件簡化它,請嘗試以下操作。你的循環看起來是正確的,但下面的變化將處理引號。

您可能還希望將%% a *匹配更改爲特定文件,以便您不會捕獲現有的jpgs或非圖像文件,例如,對於%% f in(%% a * .png %% a * .gif)做...

最後,在兩個轉換行前面添加一個「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 
+0

這是完美的羅德尼,真的很感謝你在腳本中的意見,也幫助我理解,感謝您抽出時間幫助我 – Luke

+0

也許使用powershell腳本 – Kiquenet

0

不是你想要的;這將在原始目錄內創建一個新目錄以將修改後的照片保存到:

:: 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") 
+0

我沒有正確閱讀您的問題,我的代碼只能閱讀jpg圖像,然後在保存之前調整它們的大小。 – Bonzo

相關問題