2016-08-23 14 views
1

私はフォルダc:\ Scriptsを持っています。 私はそこにある三つのファイルに入れて:私は自動化された方法で、毎日1ずつインクリメントバージョンを渡すようにしようとしていますファイルを読み込んでWindowsのバッチファイルから別の.batを呼び出す

1.2.3.4 

のように私のbuild.txt何か内部ビルド番号を持っている

build.txt 
trigger.bat 
deploy.bat 

。ですから、今日私の.txtファイルは1.2.3.4ですが、私のtrigger.batはコマンドライン引数1.2.3.5(1ずつインクリメント)でdeploy.batを呼び出さなければなりません。また、私は.txtファイルの内容を1.2.3.5で上書きする必要があります。だから、明日、それは1.2.3.6に自動的に増加します。私は私が取得しようと、バージョンを区切るようインクリメントする方法がわからない

  1. @echo off 
    set /p build=<version.txt 
    FOR /f "tokens=4* delims=." %%a IN ("%build%") DO (
    set ver=%%a 
    ) 
    set /A ver=ver+1 
    .\deploy.bat -version "1.2.3.%ver%" 
    

    私はそこに二つの問題があります。今、私は私のtrigger.bat内でこれを持って

    それを増分してから連結して私のバージョンに合格させてください。それは誰もが私が推測することができる最悪の方法です。私はそれをどのように増やすことができるかについてここで何か助けが必要です。

  2. テキストファイルを上書きするにはどうすればよいですか?だから、増分された値を参考にすれば、私はecho %version% > version.txtを実行して、テキストファイルを上書きすることができます。そうでない場合は、これも手伝ってください。

PowerShellソリューションでも問題ありません。 Windowsバッチスクリプトの基本を知っているので、私はそのルートを選択しました。

+1

バージョン1.2.3.9以降、1.2.3.10または1.2.4.0に移動しますか? – SomethingDark

+1

標準のバージョン管理ルールに従って、1.2.3です。10(悲しいことに、ソートや比較が難しくなります) – Stephan

+0

1.2.3.9の後は1.2.3.10です。 –

答えて

2

1)を入力すると、にはがあります。あなたのアプローチは正しい方向に向かいます。ちょうどそれをより柔軟にするために、それを少し延び:

正しい
setlocal enabledelayedexpansion 
set /p build=<version.txt 
for /f "tokens=1-4 delims=." %%a in ("%build%") do (
    set /a last=%%d + 1 
    set ver=%%a.%%b.%%c.!last! 
) 
echo %ver% > version.txt 
.\deploy.bat -version "%ver%" 

2)、>宛先ファイルを上書きする(またはそれが存在しない場合)、それを作成します。 (>>が追加されます)

+0

こんにちはステファン、ありがとう!一つの質問があります。それは10日間のスプリントです。 10日後に3桁目を変更する必要があります。たとえば、1.2.3.1,1.2.3.2,1.2.3.3,1.2.3.4、... 1.2.3.10になります。そして、11日目には、私は1.2.4.1という新しいスプリントになります。バッチスクリプトからこの10日間を操作する方法はありますか?バージョンの最後の桁から来ている可能性がありますか? 10になったら、1.2.3.11でも1.2.4.1にしてはいけません。ありがとうございました! –

+1

(第10日またはバージョン番号に基づいていますか?どちらも可能ですが、ハウツーは完全に異なっています。 – Stephan

+1

@BhavaniKannan、バージョン文字列の3番目の部分的な数字を* date *で増分する場合、別のバッチスクリプトでそれを行い、それに応じてスケジュールします。日付計算はバッチスクリプティングのネイティブではないからです。 e。例えば、毎日「08:00」、「trigger.bat」が実行され、「07:50」の10日ごとに新しいスクリプトが実行されます。 – aschipfl

1

なぜファイルコンテンツを変数に読み込んで最初に解析するのですか?for /F?すぐにファイルを読むことができますfor /F>リダイレクション演算子を使用すると、最終的にテキストファイルを上書きすることができます。ここで

は、バッチスクリプトtrigger.batの更新されたコードです:

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 

rem // Define constants here: 
set "FILE=%~dp0build.txt" 

for /F "usebackq tokens=1-4 delims=." %%A in ("%FILE%") do (
    set "VER=%%A" & set "MAJ=%%B" & set "MIN=%%C" & set "BLD=%%D" 
    set /A "BLD+=1" 
    rem // Rules for incrementing the numeric parts: 
    if !BLD! GTR 10 (set /A "BLD=1, MIN+=1") 
    set "VERSION=!VER!.!MAJ!.!MIN!.!BLD!" 
) 
> "%FILE%" echo %VERSION% 

call "%~dp0deploy.bat" -version "%VERSION%" 

endlocal 
exit /B 

あなたはその後、このバッチファイルに戻るにはcallコマンドを使用する必要がありますdeploy.bat他のバッチファイルを呼び出すには。 %~dp0という接頭辞は、このスクリプトの親ディレクトリでdeploy.batを検索するようにスクリプトに指示します。(C:\Scripts\の場合)は、.\とは異なり、現在の作業ディレクトリを検索します。特に、Windowsタスクスケジューラでtrigger.batを実行している場合、デフォルトの作業ディレクトリは%SystemRoot%\System32のようになります。

関連する問題