2016-07-27 4 views
1

私は簡単な質問のために私を許してバッチプログラミングでnoobです。バッチ:フォルダ内のすべてのファイルに対してプログラムを実行する方法と、元のファイル名を使用して結果の出力ファイルを作成する方法は?

私はCにおけるFSCというフォルダがあります。私は、プログラムの開発を実行したいと思いますのように呼ばれるテキストファイルの千と千と\ TTG \ FSC、1_A.txt2_A.txtなど を元のファイル名を別のファイルに変更して出力します(例:1_A.txtには1_A_out.txtという出力ファイルがあります)。私はすでに1つのファイルでプログラムを実行するためにテストしており、それは動作します(コマンドラインタグフレンズファイル名)。

フォルダーの各ファイルを解析して出力ファイルを作成するには、どのようにforループを作成できますか?

私はこれを試してみたが、それは

for /F %%i in ('dir /b "c:\treetagger\FSCB1\"') do 
tag-french %%i > %%i_out 

を動作しません。私はこれを書いUbuntuの中でそれを行うことができます。

for l in /home/sp/Desktop/FSCM5/* 
do 
    echo $l 
    filename=$(basename "$l") 
    extension="${filename##*.}" 
    filename="${filename%.*}" 
    filename=($(echo "/home/sp/Desktop/FSCM5TTG/"$filename"_"ttg"_."$extension)) 
    echo $filename 
    sh /home/sp/Desktop/TTG/cmd/tree-tagger-french $l > $filename 
done 

しかし、私は窓でこれを行う方法を学習したいと思いますあまりに

+0

これは、FOR/Fループがあるためです。フォルダー内のすべての(一致する)ファイルを再帰的に列挙し、その上でコマンドを実行するためのものです。コマンド構文を得るには 'FOR /? 'をタイプしてください。 – user1016274

+0

これを実行しようとしましたが動作しません。 for( 'dir/b "c:\ treetagger \ FSCB1 \"')do/f %% iに対してdo tag-french %% i>% %i_out – Jurafsky

+0

ディレクトリに '* _out.txt'という名前のファイルがすでにある場合はどうなりますか? – aschipfl

答えて

0

私は成功でこれをテストしてみた:

for /F "delims=" %%i in ('dir /b "c:\treetagger\FSCB1\*.*"') do tag-french "%%i" > "%%i_out" 

delims=オプションを使用して、ファイル名にスペースが含まれていてもファイル名を保持する必要がありました。
edit:ループ変数の前にオプションを配置する必要があります。

+0

C:\ TreeTagger> for/F%i "delim =" in( 'dir/b "c:\ treetagger \ FSCB1 \ *。*"')doタグ -french "%i"> "%i_out " " delims = "この時点では予期しなかったものです。 C:\ TreeTagger>/F %% i "delims =" in( 'dir/b "c:\ treetagger \ FSCB1 \ *。*"')do ta g-french "%% i"> "%% i_out" %%私は今回は予期せぬことでした。 – Jurafsky

+0

申し訳ありませんが、バグを貼り付けました。「delims」のようなオプションをループ変数の前に置く必要があります。コードが編集されました。 – user1016274

+0

ここでは動作しません:作成されたファイルは空です:\ – Jurafsky

関連する問題