2013-09-27 57 views
0

我正在嘗試編寫一個批處理文件,該文件將通過目錄搜索* .pdf文件擴展名,然後將它們轉換爲帶有ImageMagic的* .tif文件擴展名。如果目錄中有一個PDF文件,我能夠做到這一點,但如果有多個PDF文件,我無法弄清楚如何使用正確的名稱進行轉換。問題是,在循環內,該fName變量似乎並沒有被分配,但之外,它有一個價值...批處理文件變量值在循環之外不可用

這裏是一個爲一個PDF文件的工作代碼並且適用於多種,但名稱containts「.PDF」:

echo off 
set dSource=C:\Users\Nick\Documents\Research\Journal Article\Figures 
set fType=*.pdf 
for /f "delims=" %%f in ('dir /a-d /b "%dSource%\%fType%"') do (
    rem remove extension from file name, set value to variable: 
    set fName=%%~nf 

    rem call ImageMagic to convert to TIFF 
    rem convert -compose copy -density 300 -alpha off "%%f" "%%f.tif" 
    rem above line (when uncommented) lets multiple TIFF images to be produced, but they are *.pdf.tif 

    rem convert -compose copy -density 300 -alpha off "%fName%.pdf" "%fName%.tif" 
    rem above line (when uncommented) does not work because fName has no value... 

    rem variable value does not appear to be assigned within loop: 
    echo.file name within loop: %fName% 
) 
echo.file name after loop: %fName% 
rem outside loop, variable value is now available... 
rem convert -compose copy -density 300 -alpha off "%fName%.pdf" "%fName%.tif" 
rem above line of code works, but only for the last file name with *.pdf discovered in directory 
pause 
+0

那是在你的for循環中「轉換」語句嗎? – kenny

+0

嗨@kenny,是的,我想循環中的轉換語句轉換多個數字。 – user217558

回答

1

啓用延遲擴展,如果你需要設置一個變量,並在同一循環中使用它,然後參考變量使用!循環而不是%

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
set dSource=C:\Users\Nick\Documents\Research\Journal Article\Figures 
set fType=*.pdf 
for /f "delims=" %%f in ('dir /a-d /b "%dSource%\%fType%"') do (
    set fName=%%~nf 
    echo fName in the loop: !fName! 
) 
echo fName out of the loop: %fName% 

谷歌「批量延遲擴展」的細節。

+0

謝謝@Nate Hekman這解決了我的問題! – user217558

0

在你的情況的解決方案是更換此:

convert -compose copy -density 300 -alpha off "%%f" "%%f.tif" 

與此:

convert -compose copy -density 300 -alpha off "%%f" "%%~dpnf.tif" 
rem or "%%~nf.tif" to save them all in the current folder. 

與延遲擴展的缺點是一個!字符變得更難以在一個文件名來處理或路徑或字符串。

+0

感謝您回覆@foxidrive,這也是一個有效的解決方案。我最初希望將文件名存儲在一個變量(數組?)中,以便我可以在循環外部訪問它們以通過批處理文件對IrfanView進行編輯,但到目前爲止,這並未證明是必要的,因爲我可以只添加代碼在現有的循環內! – user217558