2015-12-17 3 views
0

Я запускаю цикл FOR на сотни файлов txt в каталоге. Команда, запускаемая для каждого файла, одинакова, но есть одна переменная (число), которая уникальна для каждого файла. Эта переменная находится в последнем столбце каждой строки в файле (csv) - то же число для всего файла. Есть ли способ проанализировать это и установить его как переменную перед запуском команды?Для цикла разбора переменной из текстового файла

ДЛЯ %% I IN (*) DO xxx.exe параметры

В качестве альтернативы я мог сделать текстовый файл, содержащий все имена файлов и переменную для каждого файла и запустить его таким образом.

+0

Является ли «последняя колонка» всегда на том же месте? Колонка 7? Если это так, то это довольно легко. – lit

+0

Да последний colum всегда в одном и том же месте, переменная одинакова во всем файле. Поэтому нужно только прочитать последнее значение в первой строке, а затем установить это как переменную, которая будет частью команды, выполняемой во всем файле. – Nicknz125

ответ

0
setlocal EnableDelayedExpansion 

FOR %%I IN (*) DO (

    rem Get first row from this file 
    set /P "row1=" < "%%I" 

    rem Get last column from first row separated by comma or space 
    for %%a in (!row1!) do set "number=%%a" 

    xxx.exe /file "%%I" /number !number! 

) 
+0

Сценарий Aacini работает, если число всегда является последним полем. Если это не так, или если вы хотите пропустить номер параметра для каждого поля в строке, вы можете использовать 'FOR/F 'delims =; tokens = 1-4" %% a IN ("! Row1!") DO (SET "number = %% d") ' – lit

+0

@ Литургист: Конечно, это решение работает только тогда, когда число является последним полем! Разве вы не читали запрос OP? '" Есть одна переменная (число), которая уникальна для каждого файла. Эта переменная находится в последнем столбце каждой строки "', а '" нужно прочитать последнее значение в первой строке, а затем установить это как переменную " '. Представляете ли вы, что я должен публиковать решения для вопросов без вопросов? ** ': /' ** (я боюсь, что не понимаю цели вашего комментария) – Aacini

+0

Спасибо за вашу помощь @Aacini. Не могли бы вы объяснить, почему '(set/p" row1 = "<" %% I ")' только читает одну строку из текстового файла, хотя он выведет весь файл? Почему нам нужно использовать для этого задержанное расширение? – Nicknz125

Смежные вопросы