2017-08-17 22 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が必要です。私が '$ $ Splitversion [2];' '$ NextBuild =" $ Splitversion [0] \。$ Splitversion [1] \。$ NEXTBUILDLETTER "にコードを変更すると、 がコードを変更します。 ' ' print $ NextBuild; ' それは1.0.2,1.0.3などを与えます –

+0

申し訳ありませんが、その部分を逃しました。編集した私の答え – ysth

+0

それは常に無効なバージョンと言います。 無効なbuildno 1.0.2Bのバージョン.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のパラメータとして提供されたコードの後に​​、:incverルーチンは、次の順序を含むnewverを生成します。

次のコードは、最後の文字を見て次のコードを選択し、最後の有効な文字を増やして最初のコードを選択することで得られます。

したがって、次の選択が最初の有効と同じ場合、新しい文字を追加する(最後の文字を削除して最初の有効な文字を2回追加する)か、2番目の文字を増やす最初の有効な文字を追加します。このような何かに

+0

@Thanks Magoo。 これは完璧です。しかし、私は ' を変更する場合:next' ' CALLを:%バージョン% ' ' ECHOバージョン=%バージョン%incver - 新バージョン=%newver% ' へ ' SETLOCAL' '/ F「トークン= 1 、2 delims == "%% in in(Version.txt)" SET "version = %% i" " ':next' 'CALL:incver%バージョン%' 'ECHO%newver %% LF%> E :\ Tests \ 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 –

関連する問題