Wie verwende ich eine for-Schleife und gibt sie in ein anderes Verzeichnis aus

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

Ich verwende pdftotext (xpft, Verwendung oben), um alle pdfs in einem Verzeichnis (und Unterverzeichnissen) in Textdateien umzuwandeln. Es ist egal, ob die Struktur erhalten bleibt oder nicht. Ich möchte die Dateien nur in ein anderes Verzeichnis schreiben.

I have cmd cd already pointing at the directory ("C:\input" say ).

So if the path of a given input file is

 C:\input\filename.pdf 

And I want to output to

 C:\output\filename.txt 

My command:

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

Nearly works, but it attempts to output to

 C:\input\C:\output\filename 

which obviously causes an error.

How do I solve this?

1

1 Antwort auf die Frage

2
DavidPostill

Wie verwende ich eine for-Schleife und gibt sie in ein anderes Verzeichnis aus

Verwenden Sie den folgenden Befehl:

for /r %i in (*.pdf) do pdftotext -raw "%i" "C:\output\%~ni.txt" 
  • %~niNur %izu einem Dateinamen erweitert (dh Laufwerkbuchstabe, Pfad und .pdfErweiterung werden entfernt)

  • %~ni.txt fügt auch eine neue Erweiterung hinzu, .txt


Erweiterte Syntax

Wenn ein Argument zur Angabe eines Dateinamens verwendet wird, kann die folgende erweiterte Syntax angewendet werden:

wir verwenden die Variable% 1 (dies funktioniert aber für jeden Parameter)

  • % ~ f1 Erweitern Sie% 1 mit einem vollständig qualifizierten Pfadnamen - C: \ utils \ MyFile.txt

  • % ~ d1 Erweitern Sie% 1 nur auf einen Laufwerkbuchstaben - C:

  • % ~ p1 Erweitern Sie% 1 nur auf einen Pfad, z. B. \ utils \. Dies schließt ein nachfolgendes \ ein, das von einigen Befehlen als Escape-Zeichen interpretiert wird.

  • % ~ n1 Erweitern Sie% 1 zu einem Dateinamen ohne Dateierweiterung C: \ utils \ MyFile oder, wenn nur ein Pfad vorhanden ist (ohne nachgestellten Backslash) - der letzte Ordner in diesem Pfad.

  • % ~ x1 Erweitern Sie% 1 nur auf eine Dateierweiterung - .txt

  • % ~ s1 Ändern Sie die Bedeutung von f, n, s und x, um auf den Kurznamen 8.3 zu verweisen (falls vorhanden).

  • % ~ 1 Erweitern Sie% 1, indem Sie alle umgebenden Anführungszeichen entfernen (").

  • % ~ a1 Zeigt die Dateiattribute von% 1 an

  • % ~ t1 Zeigt Datum und Uhrzeit von% 1 an

  • % ~ z1 Zeigt die Dateigröße von% 1 an

  • % ~ $ PATH: 1 Durchsuchen Sie die Umgebungsvariable PATH und erweitern Sie% 1 um den vollständig qualifizierten Namen der ersten gefundenen Übereinstimmung.

Die Modifikatoren oben können kombiniert werden:

  • % ~ dp1 Erweitern Sie% 1 nur um einen Laufwerkbuchstaben und -pfad

  • % ~ sp1 Erweitern Sie% 1 auf einen Pfad, der auf 8,3 Zeichen verkürzt ist

  • % ~ nx2 Erweitern Sie% 2 nur auf einen Dateinamen und eine Erweiterung

Quellbefehlszeilenargumente (Parameter)


Lesen Sie weiter

Diese Antwort ist eine gottverdammte Perfektion. Vielen Dank! Some_Guy vor 8 Jahren 0
Oh, außer es funktioniert nicht wirklich. Es scheint, dass in der Tat das letzte% i als Eingabedatei und nicht die Ausgabe verwendet wird. Der Grund für `/ r% i in (* .pdf) ist, dass pdftotext"% i "funktioniert, da pdftotext automatisch einen Text erstellt Datei im selben Verzeichnis, wenn kein Ausgabeverzeichnis angegeben wird. Was ich eigentlich will, ist `for / r% i in (* .pdf). pdftotext -raw"% i "" C: \ output \% ~ ni.txt "` Some_Guy vor 8 Jahren 0
Ich werde beide Fragen und Antworten entsprechend bearbeiten Some_Guy vor 8 Jahren 0