2016-07-27 2 views
1

Я ноб в пакетном программировании, поэтому извините меня за простой вопрос.Пакет: как запустить программу для всех файлов в папке и как создать выходной файл для результата с использованием исходного имени файла?

У меня есть папка под названием FSC в C: \ TTG \ FSC, с тысячами и тысячами текстовых файлов называются как 1_A.txt2_A.txt и т.д. Я хотел бы запустить программку и вывести его в другой файл, переименовав оригинал (например, 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 

я могу это сделать в убунту это пишу:

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

Я пытался это сделать, но он не работает: для/F %% i in ('dir/b "c: \ treetagger \ FSCB1 \"') 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= для сохранения имен файлов, даже если они содержат пробелы.
Редактировать: параметры должны быть помещены перед переменной цикла.

+0

C: \ TreeTagger> для/F% i "delims =" in ('dir/b "c: \ treetagger \ FSCB1 \ *. *"') do tag -french "% i"> "% i_out « « delims = »было неожиданным в это время. C: \ TreeTagger> for/F %% i "delims =" in ('dir/b "c: \ treetagger \ FSCB1 \ *. *"') Сделать ta g-french "%% i"> «%% i_out» %% я был неожиданным в это время. – Jurafsky

+0

извините, вставил ошибку: опции, такие как «delims», должны быть помещены перед переменной цикла. Код отредактирован. – user1016274

+0

здесь не работает: созданные файлы пустые: \ – Jurafsky