2016-07-27 13 views
1

Ich bin ein Anfänger bei Batch-Programmierung, also entschuldige mich für die einfache Frage.Batch: Wie führe ich ein Programm für alle Dateien in einem Ordner aus und wie erstelle ich eine Ausgabedatei für das Ergebnis unter Verwendung des ursprünglichen Dateinamens?

Ich habe einen Ordner FSC in C genannt: \ TTG \ FSC, mit tausend und tausend von Textdateien wie 1_A.txt2_A.txt usw. Ich möchte ein Programm ausführen und haben ihre Ausgabe in einer anderen Datei, die die ursprüngliche Datei umbenennt (z. B. 1_A.txt wird eine Ausgabedatei namens 1_A_out.txt haben). Ich habe bereits getestet, um das Programm auf 1 Datei auszuführen und es funktioniert (einfach auf die Befehlszeile schreiben Tag-Französisch Dateiname).

Also, wie kann ich die for-Schleife für die Analyse jeder Datei auf dem Ordner erstellen und die Ausgabedateien erstellen?

Ich habe dies versucht, aber es nicht

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

ich es in ubuntu tun funktioniert kann dies zu schreiben:

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 

Aber ich möchte lernen, wie man dies in Windows zu tun auch

+0

Das ist, wofür die 'FOR/F'-Schleife ist - listet alle (übereinstimmenden) Dateien in einem Ordner möglicherweise rekursiv auf und führt einen Befehl für sie aus. Geben Sie 'FOR /?' Ein, um die Befehlssyntax zu erhalten. – user1016274

+0

Ich habe versucht, dies zu tun, aber es funktioniert nicht: für/F %% i in ('dir/b "c: \ treetagger \ FSCB1 \"') tun tag-french %% i>% % i_out – Jurafsky

+0

Was passiert, wenn bereits Dateien mit dem Namen '* _out.txt' im Verzeichnis vorhanden sind? – aschipfl

Antwort

0

ich habe dies mit Erfolg getestet:

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

Ich musste die Option delims= verwenden, um Dateinamen beizubehalten, selbst wenn sie Leerzeichen enthielten.
bearbeiten: Optionen müssen vor der Schleifenvariable platziert werden.

+0

C: \ TreeTagger> für/F% i "delims =" in ('dir/b "c: \ treetagger \ FSCB1 \ *. *"') Tag -french "% i"> "% i_out " " delims = "war zu diesem Zeitpunkt unerwartet. C: \ TreeTagger> für/F %% i "delims =" in ('dir/b "c: \ treetagger \ FSCB1 \ *. *"') Tu ta g-french "%% i"> "%% i_out" %% Ich war zu dieser Zeit unerwartet. – Jurafsky

+0

Entschuldigung, habe einen Fehler wieder eingefügt: Optionen wie "delims" müssen vor die loop-Variable gestellt werden. Code bearbeitet – user1016274

+0

funktioniert es hier nicht: Die erstellten Dateien sind leer: \ – Jurafsky