2013-09-27 2 views
0

Я пытаюсь написать пакетный файл, который будет искать в каталоге для расширений файлов * .pdf, а затем преобразовывать их в расширения * .tif с файлами ImageMagic. Я могу сделать это, если в каталоге есть один файл 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% 

Google "пакетное замедленное расширение" для деталей.

+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, это также действительное решение. Сначала мне захотелось сохранить имена файлов в переменной (array?), Поэтому у меня есть доступ к ним за пределами цикла для внесения изменений в IrfanView через пакетный файл, но пока это не оказалось необходимым, потому что я могу просто добавить код в рамках существующего цикла! – user217558

Смежные вопросы