У меня есть пакетный файл, который выполняет часть процесса сборки программного обеспечения. Он вытаскивает текущее имя тега из системы сборки и помещает его в сгенерированный исходный файл C. Если источник не создается из тега, он получает имя последнего тега (формы 1.2.34 или 1.23). Затем он увеличивает «номер сборки» на 1 и добавляет текст «Разработка». Или, по крайней мере, это должно быть. Вот что я придумал:Приращение последней последовательности чисел, разделенных периодом, в пакетном файле
REM Increment the release tag. This will only work for Vx.y.z type release tags.
for /f "delims=. tokens=1-3" %%A in ("!_lasttag!") do (
set /a lastv = %%C + 1
set "tag=%%A.%%B.!lastv! (Development)"
)
вход в _lasttag
, выход в tag
.
Это прекрасно подходит для тегов формы «x.y.zz
», но не удается, если кто-то делает фиксацию на теге формы «1.23
».
Есть ли лучший способ сделать это?
В идеале я хотел то, что будет работать на любой из следующих версии насчитывающие случая:
1.2
1.2.34
1.2.34.56
Моя следующая идея (с точки зрения того, как это сделать) было перебирать струны с FOR
к подсчитайте жетоны, затем сделайте это снова, пока количество токенов не достигнет последнего токена. Я закончил с этим:
set _nvertags=0
for /f "delims=." %%A in ('echo !_lasttag!') do (
echo %%A
set /a _nvertags+=1
)
Но вместо того, чтобы цикл через три раза (с входом «1.2.34
»), она работала только один раз, в результате чего nvertags
набор 1. Очевидно, что я что-то не хватает где-то .. .
не уверен, что проблема exactly.You хочет разбить строку с числами от '.' и принимать какие части? – npocmaka