に次のスクリプトを拡張し、明白な方法で抽出された値を拡張することができ - 私たちはそれupdate-versions.bat
を呼びましょう - あなたが欲しいものを行う必要があります。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Parse command line arguments:
set "DIRN=#define"
set "FILE=%~1"
if not defined FILE (>&2 echo ERROR: too few arguments!) & exit /B 1
shift /1
set /A "IDX=0"
:ARGS
set "ARGV=%~1"
if not defined ARGV goto :SKIP
set /A "IDX+=1"
set "KEY[%IDX%]=%ARGV::=" & rem "%"
if not defined KEY[%IDX%] set /A "IDX-=1" & goto :SKIP
set "VER[%IDX%]=10000%ARGV:*:=%"
set /A "VER[%IDX%]%%=10000"
shift /1
goto :ARGS
:SKIP
rem // Process file:
for /F "delims=" %%L in ('findstr /N /R "^" "%FILE%" ^& ^> "%FILE%" rem/') do (
set "LINE=%%L"
setlocal EnableDelayedExpansion
(
for /F "tokens=1-3*" %%A in ("!LINE:*:=!") do (
endlocal
if /I "%%A"=="%DIRN%" (
set "VER=" & set "ITEM=%%B" & set "REST=%%D"
setlocal EnableDelayedExpansion
for /L %%I in (1,1,%IDX%) do (
if /I "!ITEM!"=="!KEY[%%I]!" (
set "KEY=!KEY[%%I]!"
set "VER=!VER[%%I]!"
)
)
if defined VER (
>> "!FILE!" echo(!DIRN! !KEY! !VER! !REST!
) else (
>> "!FILE!" echo(!LINE:*:=!
)
) else (
setlocal EnableDelayedExpansion
>> "!FILE!" echo(!LINE:*:=!
)
)
) || (>> "!FILE!" echo/)
endlocal
)
endlocal
exit /B
がそれを使用するには、変更するファイルとバージョン情報をコマンドライン引数として提供する必要があります。
update-versions.bat "\path\to\file.h" MAJOR_VERSION:3 MINOR_VERSION:59 REVISION_VERSION:0
最初の引数がファイルへのパスであることがわかりますhichは必須です。残りの各引数は、バージョン番号キーワード(#defined
ディレクティブの後に表示されます)と関連する新しいバージョン番号をコロンで区切って指定します。これらはすべてオプションの引数です。
「更新」 - 自動インクリメントとは何を意味していますか? ? – aschipfl