forループを使用して別のディレクトリに出力するにはどうすればよいですか

forループを使用して別のディレクトリに出力するにはどうすればよいですか
 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

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 をファイル拡張子のみに展開 - .txt

  • %~s1 f、n、s、x の意味を変更して、Short 8.3 名 (存在する場合) を参照します。

  • %~1 %1 を展開し、周囲の引用符 (") を削除します

  • %~a1 %1 のファイル属性を表示します

  • %~t1 %1の日付/時刻を表示します

  • %~z1 %1 のファイルサイズを表示します

  • %~$PATH:1 PATH 環境変数を検索し、最初に見つかった一致の完全修飾名に %1 を展開します。

上記の修飾子は組み合わせることができます:

  • %~dp1 %1 をドライブ文字とパスのみに展開します

  • %~sp1 %1 を 8.3 文字に短縮されたパスに展開します

  • %~nx2 %2 をファイル名と拡張子のみに展開します

ソースコマンドライン引数(パラメータ)


参考文献

関連情報