2017-09-21 136 views
0

リリースアーチファクトを含むリリースの場所から最新のリリースのバージョンを判断する必要があります。 -最新のフォルダを取得するためのバッチスクリプト

1.4 
1.4.1 
1.5 
1.5.1 
1.5.2 
latest 

上記の例では、私のスクリプトは1.5.2を返さなければなりません。リリースエンジニアはlatestという名前のフォルダを作成し、その中に最新のリリースアーティファクト(上記の1.5.2のコンテンツ)を入れます。最新のリリースを簡単にコピーできます。しかし、私の問題は、バージョンも印刷したいということです。ここに私の試みです: -

@echo off 

SET Remote="\\path to release location" 
SET newest="" 

for /f %%a in ('dir %Remote% /b /od') do (if NOT %%a=="latest" SET newest=%%a) 

echo %newest% 

これは上の例でうまくいきます。しかし、リリースエンジニアはtmpやその他のフォルダを作成することもあります(基本的に彼はクリーンアップを忘れてしまいます)。番号で始まるフォルダを簡単にソートする方法はありますか?最新リリースのバージョンを宣言してください。 @ Squashmanの提案どおり、ここで解決策を投稿この

+3

dirコマンドの出力をFINDSTRにパイプし、番号付きのディレクトリ名だけを検索する正規表現を指定します。 'findstr/r"^[0-9] [0-9] * \ [0-9] [0-9] * "' – Squashman

+0

のようなものです。 'latest'ディレクトリのリリース版も! – Compo

+0

ありがとう@Squashman - これは私が思いついたものです: '/ f %% a in( 'dir%cd%/ b/od^| findstr/r"^[0-9] [0-9] * \。 [0-9] [0-9] * "')do(SET newest = %% a) @Compo:あなたのヒントをありがとう! – Zakir

答えて

1

これは実際には最大のリリース番号である最新の変更日に依存しません。

@echo off 
setlocal enabledelayedexpansion 
set newest=000000000 
PUSHD \\servername\share\directory 
for /f "delims=" %%G in ('dir /b /ad ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*"') do (
    FOR /F "tokens=1-3 delims=." %%H IN ("%%~G") DO (
     SET "node1=000%%H" 
     SET "node1=!node1:~-3!" 
     SET "node2=000%%I" 
     SET "node2=!node2:~-3!" 
     SET "node3=000%%J" 
     SET "node3=!node3:~-3!" 
     IF 1!node1!!node2!!node3! GTR 1!newest! (
      set newest=!node1!!node2!!node3! 
      set newrelease=%%G 
     ) 
    ) 
) 
echo %newrelease% 
POPD 
pause 
+0

回答ありがとうございます。結果が正確に異なるかどうか疑問に思っています。 – Zakir

+0

@Zakirの場合は、cmdプロンプトから3つのディレクトリを作成してください。それらの名前を1.1,11.1、および2.1とします。次に、DIRコマンドを使用します。あなたは11.1が最後に 'DIR/ON'を使うと思いますか? – Squashman

1

を解決するための任意のより良いアイデアがある場合

はまたPLSがお勧め: -

@echo off 

SET Remote="//Path to release loc" 
SET newest=not set 

for /f %%a in ('dir %Remote% /b /on ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*"') do (SET newest=%%a) 

echo %newest% 

注: - ソート順を/on/odが何か私ですリリースエンジニアと協力して、次のような状況から保護する必要があります。古いリリースにパッチを当てても最新リリースを上書きしないでください。

ありがとうございます!

+0

これは繰り返しのコメントですが、最も簡単な方法は、ファイルを含め、あなたが協力しているエンジニアが関与することです。このファイルは、既知のサイズまたは拡張子をリリースの名前として持つことも、リリースで既知の名前を持つこともできます。 – Compo

+0

ディレクトリ名を変数に分割し、if文で最新のものをテストしてみませんか? – Squashman

関連する問題