2016-07-27 31 views
1

我是批量編程的noob,所以請原諒我的簡單問題。批處理:如何爲文件夾中的所有文件運行程序以及如何使用原始文件名爲結果創建輸出文件?

我有下的名爲FSC的文件夾:\ TTG \ FSC,有一千的文本文件名爲千像1_A.txt2_A.txt等 我想運行一個PROGRAMM並將其輸出重命名爲另一個文件(例如1_A.txt將有一個輸出文件,稱爲1_A_out.txt)。我已經測試過在1個文件上運行程序,它的工作原理(簡單地寫在命令行tag-french filename)。

那麼如何創建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 

但我想了解如何在Windows中執行此操作太

+0

這就是'FOR/F'循環的目的 - 可能遞歸地枚舉文件夾中的所有(匹配)文件,並對它們運行一個命令。輸入'FOR /?'來獲得命令語法。 – user1016274

+0

我試過這樣做,但它不起作用: for/F %% i in('dir/b「c:\ treetagger \ FSCB1 \」') 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=選項來保留文件名,即使它們包含空格。
編輯:選項需要放在循環變量之前。

+0

C:\ TreeTagger> 「 」delims =「此時意外。 C:\ TreeTagger>爲/ F %% i 「的delims =」 在( 'DIR/B 「C:\ treetagger \ FSCB1 \ *。*」')做TA 克 - 法語 「%%我」> 「%% i_out」 %%我在這個時候出乎意料。 – Jurafsky

+0

對不起,粘貼了一個bug:像「delims」這樣的選項需要放在循環變量之前。代碼編輯。 – user1016274

+0

它在這裏不起作用:創建的文件爲空:\ – Jurafsky

相關問題