web-dev-qa-db-ja.com

WindowsとMacのフォルダとサブフォルダで、.docファイルを.txt(プレーンASCIIテキスト)または.html、あるいはその両方に再帰的にバッチ変換しますか?

これを行うためのツールはありますか? OpenOfficeを自動化するPython/Javaツールをいくつか見てきましたが、これを確実にスクリプト化して複数のファイルを実行し、.docファイルを含むフォルダー/ディレクトリツリーを繰り返して、変換された.txtファイルと.htmlファイルを次に配置します。その場所の元のファイルに。

2
therobyouknow

@slhckソリューションはほぼ機能しますが、出力はすべてのファイルが連結されたディスプレイ/ STDOUTになります。出力として個別の.txtファイルが必要です。理由は、出力のファイル名を考慮していないためです。

フォルダー階層をトラバースする必要があることを回避するにはWindowsで* .docを検索し、結果をフォルダーにコピーして、すべてをフラット化した1つのフォルダーに配置すると、Ubuntuを起動して次のコマンドを実行できます。

(ファイル/フォルダーの再帰コードがどこかにあり、後で掘り下げて追加します。)しかし、今のところ、上記のようにファイル階層をフラット化するだけで十分です。

ちなみに、catdocはantiwordよりもうまく機能します。これは、antiwordがWordドキュメントではないファイルがあると文句を言うためです。これらは、ドキュメント内のフレームとして編成されたフォーマットとテキストのブロックを持つ.docファイルである傾向があります。 catdocは私のすべてのドキュメントを変換しているようです。

#!/usr/bin/Perl -w

 use File::Basename;

 my $okFiles = "";
 my $couldntGet = "";

 @files = <*>;
 foreach $file (@files) 
 {
   if ( $file =~ m/\.doc/ )
   { 
     my ( $filenameOnly, $dir, $ext ) = fileparse($file, qr/\.[^.]*/);
     if ( ( defined $filenameOnly ) && ( defined $ext ) )
     {
       $okFiles .= "file: ".$file." filename only:".$filenameOnly." extension:".$ext."\n";

       system( "catdoc \"".$file."\" > \"".$filenameOnly.".txt\"" );
     }
     else
     {
       $couldntGet .= "*file: ".$file." - couldn't get filename only and extension\n";
     }
   }

   print $okFiles;

   print $couldntGet;
 } 
1
therobyouknow

Linux/Unix

私が知っているUnixツールは2つあります。

  • catdoc
  • antiword

findを使用して、フォルダーを再帰的に調べることができます。

find . -name "*.doc" -exec <command> {} \;

どこ <command>は、catdocまたはantiwordのいずれかを使用して、.docファイルを.txtファイルに変換するための適切なアクションです。

Mac OS X

同じツールを使用できますが、たとえば Homebrew を使用してインストールする必要があります。これを行うには、ターミナルに入力します。

Ruby -e "$(curl -fsSL https://Gist.github.com/raw/323731/install_homebrew.rb)"

その後:

brew install catdoc
brew install antiword
3
slhck

catdocとantiwordのファイル形式のサポートは非​​常に限られており、理解できる最新バージョンはWord2000です。

LibreOfficeをスクリプト化して、理解できるファイルをテキストまたはpdfに変換できることは知っていますが(これはMediaGoblinが行うことです)、正確にそれを行う方法がわかりません。

0
Shnatsel