Как использовать цикл for и выводить в другой каталог

1473
Some_Guy
 usage: pdftotext [options] <PDF-file> [<text-file>] 

Я использую pdftotext (xpft, использование выше), чтобы преобразовать все PDF-файлы в каталоге (и подкаталогах) в текстовые файлы. Не имеет значения, сохранена ли структура или нет, я просто хочу записать файлы в другой каталог.

У меня есть cmd cd, уже указывающий на каталог (скажем "C: \ input").

Так что, если путь к данному входному файлу

 C:\input\filename.pdf 

И я хочу вывести на

 C:\output\filename.txt 

Моя команда:

 for /r %i in (*.pdf) do pdftotext "%i" -raw "C:\output\%i" 

Почти работает, но пытается вывести на

 C:\input\C:\output\filename 

что, очевидно, вызывает ошибку.

Как мне это решить?

1

1 ответ на вопрос

2
DavidPostill

Как использовать цикл for и выводить в другой каталог

Используйте следующую команду:

for /r %i in (*.pdf) do pdftotext -raw "%i" "C:\output\%~ni.txt" 
  • %~niРасширяется только %iдо имени файла (т.е. удаляет букву диска, путь и .pdfрасширение)

  • %~ni.txt также добавляет новое расширение, .txt


Расширенный синтаксис

Когда аргумент используется для указания имени файла, может применяться следующий расширенный синтаксис:

мы используем переменную% 1 (но это работает для любого параметра)

  • % ~ f1 Разверните% 1 до полного имени пути - C: \ utils \ MyFile.txt

  • % ~ d1 Развернуть% 1 только до буквы диска - C:

  • % ~ p1 Развернуть% 1 только до пути, например, \ utils \, включая завершающий символ \, который будет интерпретирован как управляющий символ некоторыми командами.

  • % ~ n1 Разверните% 1 до имени файла без расширения файла C: \ utils \ MyFile или, если присутствует только путь (без обратной косой черты) - последняя папка в этом пути.

  • % ~ x1 Развернуть% 1 только до файла eXtension - .txt

  • % ~ s1 Измените значения f, n, s и x для ссылки на короткое имя 8.3 (если оно существует).

  • % ~ 1 Расширить% 1, удалив все окружающие кавычки (")

  • % ~ a1 Показать атрибуты файла% 1

  • % ~ t1 Показать дату / время% 1

  • % ~ z1 Показать размер файла% 1

  • % ~ $ PATH: 1 Найдите переменную среды PATH и разверните% 1 до полного имени первого найденного соответствия.

Модификаторы выше могут быть объединены:

  • % ~ dp1 Развернуть% 1 только до буквы диска и пути

  • % ~ sp1 Расширить% 1 до пути, сокращенного до 8,3 символа

  • % ~ nx2 Развернуть% 2 только до имени файла и расширения

Аргументы исходной командной строки (параметры)


дальнейшее чтение

Этот ответ чертовски совершенен. Спасибо! Some_Guy 8 лет назад 0
Ох, только это на самом деле не работает. Кажется, что на самом деле он использует последний% i в качестве входного файла, а не вывода, и поэтому причина `for / r% i в (* .pdf) сделать pdftotext"% i "` работает потому, что pdftotext автоматически создает текст файл в том же каталоге, если не указан выходной каталог. То, что я на самом деле хочу, это `for / r% i в (* .pdf) сделать pdftotext -raw"% i "" C: \ output \% ~ ni.txt "` Some_Guy 8 лет назад 0
Я отредактирую оба вопроса и отвечу соответственно Some_Guy 8 лет назад 0