我不是 CMD Windows 腳本專家。
我正在嘗試使用 set 命令提取版本號(出于內部原因,我必須使用 set 命令)。
這是我在腳本中寫的內容:
REM Branch is my input
set Branch=7.8.1
set "MAJOR=%Branch:.=" & set "MINOR=%%Branch:.=" & set "PATCH=%"
echo MAJOR = %MAJOR%
echo MINOR = %MINOR%
echo PATCH = %PATCH%
這是我得到的輸出:
set "MAJOR=7" & set "MINOR=8" & set "MINOR=17" & set "PATCH=8" & set "PATCH=1"
MAJOR = 7
MINOR = 17
PATCH = 1
我想要得到的是這樣的:
>set "MAJOR=7" & set "MINOR=8" & set "PATCH=1"
>MAJOR = 7
>MINOR = 8
>PATCH = 1
uj5u.com熱心網友回復:
這是一個想法的小改編,(最初在這個外部站點執行緒中創建,并且已經在評論中特別鏈接):
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
Set "Branch=7.8.1"
Set "Vars=Major Minor Patch" & Set "p=%%"
Set "v=%Vars: =" & Set "s=!Branch:*.=!" & Call Set "!v!=!p!Branch:.!s!=!p!" & Set "Branch=!s!" & Set "v=%" & Set "!v!=!s!"
Echo Major: %Major%, Minor: %Minor%, Patch: %Patch%
Pause
uj5u.com熱心網友回復:
這是另一種可能更簡單的方法:
@echo off
setlocal EnableDelayedExpansion
set "Branch=7.8.1"
set "MAJOR=%Branch:.=" & (if not defined MINOR (set "v=MINOR") else set "v=PATCH") & set "!v!=%"
echo MAJOR = %MAJOR%
echo MINOR = %MINOR%
echo PATCH = %PATCH%
編輯 2021/12/20: 添加了新方法
我認為這是最簡單的方法:
@echo off
setlocal EnableDelayedExpansion
set "Branch=7.8.1"
set "MAJOR=%Branch:.=" & set "MINOR=!PATCH!" & set "PATCH=%"
echo MAJOR = %MAJOR%
echo MINOR = %MINOR%
echo PATCH = %PATCH%
uj5u.com熱心網友回復:
為什么以下命令列使用for /F不可接受?
set "Branch=7.8.1"
for /F "tokens=1-3 delims=." %%I in ("%Branch%") do set "MAJOR=%%I" & set "MINOR=%%J" & set "PATCH=%%K"
set "MAJOR" & set "MINOR" & set "PATCH" & rem // (just to return results)
這是最直接的,也很容易理解。
無論如何,使用set由兩行組成的方法是這樣的:
set "Branch=7.8.1"
set "INTER=%Branch:*.=%" & rem // (this must be on a separate line)
set "MAJOR=%BRANCH:.=" & rem/"%" & set "MINOR=%INTER:.=" & rem/"%" & set "PATCH=%INTER:*.=%"
set "MAJOR" & set "MINOR" & set "PATCH" & rem // (just to return results)
這是一個只包含一行的方法,需要延遲變數擴展:
set "Branch=7.8.1"
setlocal EnableDelayedExpansion
set "PATCH=" & rem // (this variable must be initially cleared)
set "MAJOR=%Branch:.=" & (if defined PATCH set "MINOR=!PATCH!") & set "PATCH=%"
set "MAJOR" & set "MINOR" & set "PATCH" & rem // (just to return results)
endlocal
初始化命令set "PATCH="可以與使用&.
這也是一個單行方法,不需要延遲變數擴展,但依賴于第三個數字(存盤在變數中PATCH)不具有前導零的事實:
set "Branch=7.8.1"
set "PATCH=" & rem // (this variable must be initially cleared)
set "MAJOR=%Branch:.=" & (if defined PATCH set /A "MINOR=PATCH") & set "PATCH=%"
set "MAJOR" & set "MINOR" & set "PATCH" & rem // (just to return results)
同樣,該行set "PATCH="可以與以下一行結合使用&。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/392210.html
下一篇:特殊字符后批量替換字串
