Как найти номер версии в строке в сценарии cmd? - PullRequest
0 голосов
/ 16 октября 2018

Для моего проекта по разработке программного обеспечения я использую файлы .cmd для автоматического создания двоичных файлов с номером версии в имени файла.Номер версии хранится в заголовочном файле C.

У меня есть файл с именем app_version.h, который содержит что-то вроде

Generic include file code or commenting
#define APP_SW_VER ("Vx.y.zww")
More generic include file code or commenting

Где Vx.y.zww - формат версиичисло.Допустимые примеры:

  • V1.0.1
  • V1.0.1DBG
  • V1.0.1PT11
  • V81.2.1RC2

Что касается имени файла, я хочу заменить точки подчеркиванием и добавить его к предопределенной строке, а затем использовать его в качестве имени файла.

Основная проблема: Чтобы извлечьVx.y.zww part и используйте его как переменную в файле cmd.

Пример всей процедуры

Входные данные:

"MYPROGRAM" какпредопределенная строка

Двоичный файл с именем "output.bin"

Файл app_version.h содержит строку #define APP_SW_VER ("V1.1.3")

Требуемый вывод:

Файл с именем"MYPROGRAM_V1_1_3.bin"

1 Ответ

0 голосов
/ 16 октября 2018

довольно прямо (теоретически - см. Примечание ниже): получите правильную линию и получите часть между кавычками.Замените . на _ и добавьте предопределенную строку и расширение:

for /f tokens^=2delims^=^" %%a in ('type app_version.h^|findstr /bc:"#define APP_SW_VER"') do set "ver=%%a"
echo MYPROGRAM_%ver:.=_%.bin

Примечание: обычный синтаксис for /f "tokens=2 delims=x" нельзя использовать для разделителя ".Поэтому мы должны использовать этот уродливый обходной путь (без окружающих кавычек, но вместо этого избегая некоторых специальных символов).

Другая возможность (спасибо Squashman) - использовать () в качестве разделителей.Кавычки можно легко удалить с помощью %%~a (можно сохранить привычный синтаксис):

for /f "tokens=2 delims=()" %%a in ('type app_version.h^|findstr /bc:"#define APP_SW_VER"') do set "ver=%%~a"
echo MYPROGRAM_%ver:.=_%.bin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...