2017-08-17 43 views
-1

我有這樣1.0.1A
一個版本我要像每次運行遞增的版本:
1.0.1B1.0.1C1.0.1D,... 1.0.1Z1.0.1AA1.0.1AB,... 1.0.1AZ1.0.1BA如何使用批處理腳本或Perl增加字母版本?

我們怎樣才能做到這一點?

現在我使用Perl和版本就像是1.0.0.A1.0.0.B

my @Splitversion = split(/\./,$Buildno); 
my $NEXTBUILDLETTER = ++$Splitversion[3]; 
$NextBuild = "$Splitversion[0]\.$Splitversion[1]\.$Splitversion[2]\.$NEXTBUILDLETTER"; 
print $NextBuild; 
+0

純代碼編寫請求是題外話堆棧溢出 - 我們期望在這裏 問題涉及到具體* *編程問題 - 但我們 會很樂意幫助你自己寫!告訴我們 [你試過的東西](https://stackoverflow.com/help/how-to-ask),以及你卡在哪裏。 這也將幫助我們更好地回答你的問題。 – Charles

+0

我明白你的意圖。但是,你怎麼能證明我正在尋找整個代碼。我需要一些想法和小邏輯。 –

回答

3

更改爲這樣的事情:

use warnings; 
use strict; 
my $Buildno = '1.02B'; 

my ($version,$letters) = $Buildno =~ /^(.*?)([A-Z]+)\z/ 
    or die "invalid buildno $Buildno\n"; 
my $NextBuild = $version . ++$letters; 
print $NextBuild, "\n"; 
+0

它的工作原理,但如果版本是一樣1.0.0.A,1.0.0.B等 ,我想1.0.1A,1.0.1B ....etc 如果我將代碼更改爲 'my $ NEXTBUILDLETTER = ++ $ Splitversion [2];' '$ NextBuild =「$ Splitversion [0] \。$ Splitversion [1] \。$ NEXTBUILDLETTER」; ' 'print $ NextBuild;' 它給1.0.2,1.0.3等 –

+0

對不起,錯過了那部分。編輯我的回答 – ysth

+0

它總是說無效版本。 無效的buildno 1.0.2B在version.pl –

1
@ECHO Off 
SETLOCAL 
SET "version=10.0.1A" 
:next 
CALL :incver %version% 
ECHO version=%version% - new version=%newver% 
SET "xxx=" 
SET /p xxx=Another ? 
IF NOT DEFINED xxx SET "version=%newver%"&GOTO next 
GOTO :EOF 

:incver 
SET "newver=%1" 
SET "valid=A B C Y Z" 
:: next on final character 
CALL :changechar %newver:~-1% 
IF %nextchar% neq %valid:~0,1% SET "newver=%newver:~0,-1%%nextchar%"&GOTO :EOF 
:: Is 2nd-last a valid char? 
:: If so, increment 2nd-last and restart last. 
FOR %%b IN (%valid%) DO IF %newver:~-2,1%==%%b (
CALL :changechar %%b 
CALL SET "newver=%newver:~0,-2%%%nextchar%%%nextchar%" 
GOTO :EOF 
) 
:: Not a valid character so append another 
SET "newver=%newver:~0,-1%%nextchar%%nextchar% 
GOTO :eof 

:changechar 
SET "nextchar=" 
FOR %%a IN (%valid% %valid:~0,1%) DO IF DEFINED nextchar (
SET "nextchar=%%a" 
GOTO :EOF 
) ELSE IF %%a==%1 SET "nextchar=%%a" 

GOTO :eof 

有趣的小運動。

在根據上述程序,按輸入明年,任何字符輸入將終止。

從最初的字符串開始,例程:incver將生成newver,其中包含在以:incver的參數提供的代碼之後的下一個順序。

下一個代碼是通過看最後一個字符選擇下一個,增加在選擇第一最後一個有效字符得到的結果。

因此,如果下一次選擇的是第一個有效的,那麼我們需要做出一個決定 - 追加一個新的字符(刪除最後一個並添加第一個有效的兩次)或遞增倒數第二個字符,並追加第一個有效的。

+0

@感謝Magoo。 這是完美的。但是,如果我改變 ':next' 'CALL:incver%版本%'' ECHO版本=%版本% - 新版本=%newver%' 到 'SETLOCAL' 'FOR/F「令牌= 1 ,2個delims ==」 %% i的(Version.txt)做SET 「版本= %% i」 的'' :next' 'CALL:incver%版本%'' ECHO%newver %% LF%>電子:\測試\ Version.txt' 爲什麼產生在version.txt文件,多餘的空行。 1)1.0.2O 2)EMPTYLINE 任何建議,以避免該行。 –

+0

如果我嘗試'ECHO | set/p =%newver %% LF%> Version.txt',它將刪除多餘的行,但它最終會生成空間。 –

0
my ($version,$letters) = $Buildno =~ /^(.*?)\.([A-Z]+)\z/ 
or die "invalid buildno $Buildno/n"; 
$NextBuild = $version . ++$letters; 
print $NextBuild."\n"; 
+0

無效的buildno 1.0.2B。在version.pl第33行 –