2015-03-10 5 views
1

Я работаю над пакетным скриптом командной строки Windows 7 для автоматизации процесса сборки. Некоторые из проектов, которые необходимо построить, зависят от других проектов. Обычный процесс (при отсутствии зависимостей) заключается в том, чтобы сделать dir /AD /B из корневого каталога репозитория, чтобы получить имена проектов для компиляции. (Это работает со структурой папок и соглашениями об именах, которые мы используем.) Что я хотел бы сделать, это добавить файл buildorder.txt, чтобы указать любой необходимый порядок сборки для зависимостей только, который может включать или не включать все проектов, которые необходимо построить.Batch Script List Checking

Вот некоторые псевдо-код, чтобы показать, что я пытаюсь выполнить:

if exist buildorder.txt (
    for /F %%i in buildorder.txt do (
    rem build each project in order specified in buildorder.txt 
) 
) 

for /F %%i in ('dir /AD /B') do (
    rem build all of the remaining project that have not already been built 
) 

Имейте в виду, некоторые (или, возможно, все) предметов, обнаруженных во второй for петли будут уже обработаны в первом цикле for, и я бы предпочел не строить эти проекты во второй раз.

Любые мысли о том, как это можно сделать, будут высоко оценены! Благодаря!

+0

@rojo Это отлично работает! Не забудьте оставить свой ответ и ответить на мой вопрос. Благодаря! –

ответ

1

Для второго цикла for /F, делают

findstr /i "%%i" buildorder.txt >NUL || (rem build %%i) 

conditional execution оценивает ложно, и приступает к сборке, если %%i не найден в buildorder.txt.