#windows #batch-file #pdf #recursion
#Windows #пакетный файл #PDF #рекурсия
Вопрос:
Я пытаюсь создать рекурсивный пакетный файл, который будет проходить через набор папок и конвертировать файл из .tif
в .pdf
.
Все папки настроены по годам, месяцам:
2016 -January (1-31) -February (1-28)
… вниз по месяцам и дням. Я пытаюсь написать пакетный файл, который будет проходить через каждую из этих папок, находить любые .tif
файлы и конвертировать их .pdf
. Я новичок в пакетной обработке и написании сценариев, поэтому я не знаю точно, что мне нужно написать, чтобы это произошло. Вот что я получил, и большую часть этого я нашел в Интернете.
Я использую программу под названием Image Magick для преобразования:
@Echo on
cd C:Usersars001DownloadsJanuary*)
%%v = .tif
for /r %%v in (C:Usersars001DownloadsJanuary*) do convert "*.tif" "*.pdf"
Вопросы:
- Можете ли вы сделать расширение переменной? Например
A= .pdf
? - Почему переменная использует два знака процента? Означает ли это, что это повторяется?
Путь в вопросе — это пример папки и пути, которые я создал на своем локальном компьютере, прежде чем попробовать его на сервере.
пример пути:
January 1, 2
Комментарии:
1. Где документация для этой волшебной команды преобразования, которую вы используете?
Ответ №1:
Эта строка — то, что вы пытаетесь сделать.
FOR /R "C:Usersars001Downloads" %%a in (*.tif) DO convert "%%~a" "%%~dpna.pdf"
Вы можете запустить это в командной строке (а не в пакетном файле), если вы измените %%
на %
. Вам нужно два %%
в пакетном файле (потому что процессор cmd разрешает все %%variables
%variables
сначала, поэтому, если вы не используете два %%
, FOR
синтаксис не будет работать. Но в самой командной строке вам нужен только один %
.
По сути, в нем говорится, что нужно начать с папки Downloads, просматривая во всех вложенных папках любой файл, который выглядит как *.tif . Затем он преобразует каждый найденный файл в PDF (при условии, что ImageMagick convert.exe находится на вашем пути).
Если вы еще не выбрали его, да, вы можете указать части имени файла. Смотрите конец HELP FOR
. Короче говоря, with %A
%~dpnxA
означает диск, путь, имя и расширение %A
.
Чтобы удалить оригинал после преобразования, сделайте это:
FOR /R "C:Usersars001Downloads" %%a in (*.tif) DO (
convert "%%~a" "%%~dpna.pdf"
IF "%ERRORLEVEL%"=="0" del "%%~a"
)
Другой способ написать то же самое (и в одной строке) выглядит следующим образом.
FOR /R "C:Usersars001Downloads" %%a in (*.tif) DO convert "%%~a" "%%~dpna.pdf" amp;amp; del "%%~a"
В amp;amp;
сообщении говорится, что следующий бит выполняется только в том случае, если команда не возвращает ошибку (т.Е. Уровень ошибки 0).
Комментарии:
1. Есть ли какой-либо способ заставить функцию удалять .tif-файл после его преобразования в .pdf?
2. @Andrew11, да. Поместите команду удаления после команды преобразования.
3. Вероятно, вы захотите удалить оригинал только в том случае, если преобразование завершится успешно. Я считаю, что преобразование ImageMagick возвращает ненулевой код ошибки в случае сбоя во время процесса. Итак, вы захотите включить проверку и удаление в
FOR
блок. Я добавлю его к ответу. Если он отвечает, пожалуйста, подумайте о том, чтобы принять его.