2017-07-09 21 views
0

以下のコードを個々のファイルで正常に実行できましたが、実行する方法を見つけたいので、ここに示すすべてのファイルをループしますディレクトリ。私はループがCMD.exe内で可能であると信じていますが、私は成功していません。どんな助けでも大歓迎です。ループを使用してLibreOfficeコマンドラインスクリプトを実行する

"C:\Program Files (x86)\LibreOffice 5\program\scalc.exe" --convert-to DBF --infilter="csv:44,34,76,1,1/2/2/2/3/2/4/2/5/2/6/2/7/2/8/2/9/2/10/2/11/2/12/2/13/2/14/2/15/2/16/2/17/2/18/2/19/2/20/2/21/2/22/2/23/2/24/2/25/2/26/2/27/2/28/2/29/2/30/2/31/2/32/2/33/2/34/2/35/2/36/2/37/2/38/2/39/2/40/2/41/2/42/2/43/2/44/2/45/2/46/2/47/2/48/2/49/2/50/2/51/2/52/2/53/2/54/2/55/2/56/2/57/2/58/2/59/2/60/2/61/2/62/2/63/2/64/2/65/2/66/2/67/2/68/2/69/2/70/2/71/2/72/2/73/2/74/2/75/2/76/2/77/2/78/2/79/2/80/2/81/2/82/2/83/2/84/2/85/2/86/2/87/2/88/2/89/2/90/2/91/2/92/2/93/2/94/2/95/2/96/2/97/2/98/2/99/2/100/2/101/2/102/2/103/2/104/2/105/2/106/2/107/2/108/2/109/2/110/2/111/2/112/2/113/2/114/2/115/2/116/2/117/2/118/2/119/2/120/2/121/2/122/2/123/2/124/2/125/2/126/2/127/2/128/2/129/2/130/2/131/2/132/2/133/2/134/2/135/2/136/2,0,false,false" C:\Users\jdavidson\Desktop\DBFCONVERT\57826001_JQSAMPLE.csv --outdir C:\Users\jdavidson\desktop\complete 

これを達成する方法についてのアイデアがありましたら、大きな助けとなります。私はこれをより大きなワークフローの一部として構築し、それを繰り返し可能にするよう努めています。

UPDATE

私は移動を変換するために使用されるバッチファイルを作成し、私はつもりディレクトリ内に置くことによって、私のディレクトリ内のファイルのすべてを(ループ)を反復処理することができましたforward

for /r %%i in (*.csv) do "C:\Program Files (x86)\LibreOffice 5\program\scalc.exe" --convert-to DBF --infilter="csv:44,34,76,1,1/2/2/2/3/2/4/2/5/2/6/2/7/2/8/2/9/2/10/2/11/2/12/2/13/2/14/2/15/2/16/2/17/2/18/2/19/2/20/2/21/2/22/2/23/2/24/2/25/2/26/2/27/2/28/2/29/2/30/2/31/2/32/2/33/2/34/2/35/2/36/2/37/2/38/2/39/2/40/2/41/2/42/2/43/2/44/2/45/2/46/2/47/2/48/2/49/2/50/2/51/2/52/2/53/2/54/2/55/2/56/2/57/2/58/2/59/2/60/2/61/2/62/2/63/2/64/2/65/2/66/2/67/2/68/2/69/2/70/2/71/2/72/2/73/2/74/2/75/2/76/2/77/2/78/2/79/2/80/2/81/2/82/2/83/2/84/2/85/2/86/2/87/2/88/2/89/2/90/2/91/2/92/2/93/2/94/2/95/2/96/2/97/2/98/2/99/2/100/2/101/2/102/2/103/2/104/2/105/2/106/2/107/2/108/2/109/2/110/2/111/2/112/2/113/2/114/2/115/2/116/2/117/2/118/2/119/2/120/2/121/2/122/2/123/2/124/2/125/2/126/2/127/2/128/2/129/2/130/2/131/2/132/2/133/2/134/2/135/2/136/2,0,false,false" C:\Users\jdavidson\Desktop\DBFCONVERT\57826001_JQSAMPLE.csv --outdir C:\Users\jdavidson\desktop\complete %%i 

私が欲しいものを達成するためにforループを使用したことに注意してください。

for /r %%i in ('list directory if command not being run in specific directory already; you can also but * for all files in directory or *.ext for the extension of only certain files) do 'add in command %%i 

答えて

0

オプション1:Open/Libre Officeを1回だけ実行するだけで、複数のドキュメントを実際に変換することができます。ただ、例えば、ワイルドカードを使用します。

"C:\Program Files (x86)\LibreOffice 5\program\scalc.exe" --convert-to DBF mydir\*.csv 

オプション2:私はその制限が何であるかわからない... Windowsは、あなたがそのように渡すことができるファイルの数に制限があることを前提としてい..しかし、あなたがいることを超えた場合あなたが数日前にこれを行うために書いたこのPythonプログラムを使用することができます。私がまだ取り組んでいるプロジェクトの一環として。私の場合、.doc.odtに変換しています。明らかに私のディレクトリはあなたと同じではありません。しかし、これをあなたのニーズに合わせて調整するのはかなり簡単です...私が私と一緒にやりたいことの一つは、変換されたファイルの存在を確認し、それが存在すればそれをスキップすることです。すべてをやり直さずに変換を再実行することができます。

docpathは、ファイルの場所に設定し、sofficeをCalc exeのパス名に設定する必要があります。私はそれらを持っている方法、それはプログラムが変換されたファイルを置くところです。そして、それらの存在をチェックします。また、私は入力ファイルを探しているパスを歩いています。何らかの理由でファイルを別のサブディレクトリに置いている場合は、それらを見つけて同じディレクトリに変換します。

import os, sys, re, subprocess 

docpath = 'doc' 
soffice = 'C:\Program Files\LibreOffice 5\program\soffice.exe' 

convert = '"%s" --headless --convert-to odt --outdir "%s" "%s"' 

def plog(fmt = '', *args): 
    sys.stdout.write(fmt % args) 
    sys.stdout.flush() 

def log(fmt = '', *args): 
    plog((fmt + '\n'), *args) 

def convert(): 
    odtfiles = [] 
    for subdir, dirs, files in os.walk(docpath): 
     for file in files: 
      if not file.endswith('.doc'): 
       continue 
      docfile = os.path.join(subdir, file) 
      odtfile = re.sub(r"\.doc$", ".odt", docfile) 
      plog("%s -> %s: " % (docfile, odtfile)) 
      if not os.path.isfile(odtfile): 
       plog('Converting.. ') 
       subprocess.check_output(convert % (soffice, docpath, docfile), shell=True) 
      log('OK.') 
      odtfiles.append(odtfile) 
     return odtfiles 

odtfiles = convert() 

Python27 ..をインストールして、convert文字列を変換の正しい設定にするだけです。他にもいくつか簡単な変更が必要ですが、助けが必要な場合はコメントでお尋ねください。

+0

ご回答ありがとうございました。私はPythonに慣れていませんが、それを読んでいます。あなたのコードを動作させるために私に提供できる助けがあれば、大歓迎です。元々投稿する前にワイルドカード* .csvを試してみましたが、結果は出ませんでした。 –

+0

little_birdie - ワイルドカードを使用できるはずですが、フィルタでDBFを使用するときはワイルドカード機能を使用できません。私は、以下のコードが動作することを発見しました。 '%'のxのための 'code'(1.1 1.2 2.4 3.9)do echo V %% x.txt' code'私はfor文を操作して、リストされたすべてのファイルを実行しました。上記の私の更新を見てください –

関連する問題