Como eu uso um loop for e a saída para um diretório diferente

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

Eu estou usando pdftotext (xpft, uso acima) para converter todos os pdfs em um diretório (e subdiretórios) para arquivos de texto. Não importa se a estrutura é preservada ou não, só quero gravar os arquivos em um diretório diferente.

Eu tenho cmd cd já apontando para o diretório ("C: \ input" dizer).

Então, se o caminho de um determinado arquivo de entrada é

 C:\input\filename.pdf

E eu quero produzir para

 C:\output\filename.txt

Meu comando:

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

Quase funciona, mas tenta produzir para

 C:\input\C:\output\filename

o que obviamente causa um erro.

Como eu resolvo isso?

Some_Guy
fonte

Respostas:

2

Como eu uso um loop for e a saída para um diretório diferente

Use o seguinte comando:

for /r %i in (*.pdf) do pdftotext -raw "%i" "C:\output\%~ni.txt"
  • %~ni Expande %i somente para um nome de arquivo (isto é, remove a letra da unidade, caminho e .pdf extensão)

  • %~ni.txt também acrescenta uma nova extensão, .txt


Sintaxe Estendida

Quando um argumento é usado para fornecer um nome de arquivo, as seguintes   A sintaxe estendida pode ser aplicada:

estamos usando a variável% 1 (mas isso funciona para qualquer parâmetro)

  • % ~ f1 Expandir% 1 para um nome de caminho completo - C: \ utils \ MyFile.txt

  • % ~ d1 Expande% 1 apenas para uma letra de unidade - C:

  • % ~ p1 Expandir% 1 para um caminho apenas por ex. \ utils \ isto inclui um trailing \ que será interpretado como um caracter de escape por algum   comandos.

  • % ~ n1 Expandir% 1 para um arquivo Nome sem extensão de arquivo C: \ utils \ MyFile ou se apenas um caminho estiver presente (sem rastreio   backslash) - a última pasta nesse caminho.

  • % ~ x1 Expandir% 1 para um arquivo somente eXtension - .txt

  • % ~ s1 Altera o significado de f, n, se x para referenciar o nome do Short 8.3 (se existir).

  • % ~ 1 Expandir% 1 removendo as aspas vizinhas (")

  • % ~ a1 Exibe os atributos de arquivo de% 1

  • % ~ t1 Exibe a data / hora de% 1

  • % ~ z1 Exibe o tamanho do arquivo de% 1

  • % ~ $ PATH: 1 Pesquise a variável de ambiente PATH e expanda% 1 ao nome completo da primeira correspondência encontrada.

Os modificadores acima podem ser combinados:

  • % ~ dp1 Expandir% 1 para uma letra de unidade e caminho apenas

  • % ~ sp1 Expande% 1 para um caminho abreviado para 8,3 caracteres

  • % ~ nx2 Expandir% 2 apenas para um nome de arquivo e extensão

Fonte Argumentos da linha de comando (parâmetros)


Leitura adicional

DavidPostill
fonte
Esta resposta é uma maldita perfeita. Obrigado!
Some_Guy
Oh, exceto que não funciona de verdade. Parece que na verdade ele está usando o último% i como o arquivo de entrada não a saída e assim a razão for /r %i in (*.pdf) do pdftotext "%i" funciona porque o pdftotext cria automaticamente um arquivo de texto no mesmo diretório se nenhum diretório de saída for especificado. Então, o que eu realmente quero é for /r %i in (*.pdf) do pdftotext -raw "%i" "C:\output\%~ni.txt"
Some_Guy
Eu vou editar a pergunta e responder apropriadamente
Some_Guy