Попытка создать рекурсивный пакетный файл, который будет проходить по папкам и конвертировать из .tif в .pdf

#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"
  

Вопросы:

  1. Можете ли вы сделать расширение переменной? Например A= .pdf ?
  2. Почему переменная использует два знака процента? Означает ли это, что это повторяется?

Путь в вопросе — это пример папки и пути, которые я создал на своем локальном компьютере, прежде чем попробовать его на сервере.

пример пути:

 January 1, 2
  

Комментарии:

1. Где документация для этой волшебной команды преобразования, которую вы используете?

2. imagemagick.org/script/command-line-processing.php

Ответ №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 блок. Я добавлю его к ответу. Если он отвечает, пожалуйста, подумайте о том, чтобы принять его.