2017-02-01 8 views
1

私たちはCIツールとしてJenkinsを使用しています。現在、私はメモ帳ファイル(開発者が作成したもの)からビルド値を取得し、ビルド値をフォルダとしてネットワークドライブにコピーするバッチファイルを作成しました。条件付きサブフォルダをバッチファイルで作成するには?

バッチファイルは現在

for /f "tokens=2" %%i in ('findstr Build "C:\Program Files (x86)\Jenkins\jobs\**\build.txt"') do set Build=%%i 
    set Build=%Build:'=% 

if not exist "\%Build%\" mkdir "%Build%\" 

私の動機の下に記載されては、小数点の後に何すなわち、メモ帳の値が6.1以上6.Aであれば、ということです、それはフォルダを作成し、それを配置しません。 6サブフォルダ内にある。また、値がいっぱいの場合は、親フォルダを作成します。

ビルド番号を取得するテキストファイルは以下のとおりです。

#define MyAppVersion '4.0.0.0' 
#define MyFullAppVersion '4.1.0.0' 
#define BuildNumber '81' 

"ビルド番号"に入力された値に基づいてフォルダを作成する必要があります。値が小数点以下の場合は、サブフォルダ内に作成する必要があります。それ以外の場合は、メインフォルダのみにする必要があります。

以下の入力の助けを借りて、これを達成するためにバッチファイルの下に作成しましたが、機能しませんでした。

for /f "tokens=2" %%i in ('findstr Build "C:\Folder Check\logs\build.txt"') do set Build=%%i 
set Build=%Build:'=% 

for /F "tokens=2""delims=." %%j in ('findstr Build "C:\Folder Check\logs\build.txt"') do set "sub=%%j" 

if exist "\\network\%Version%\%Build%\" mkdir "\\network\%Build%\%sub%%" 

if not exist "\\network\%Version%\%Build%\" mkdir "\\network\%Version%\%Build%\" 

if exist "\\network\%Version%\%Build%\%sub%%j" XCOPY /y "C:\Program Files (x86)\Notepad++\readme.txt" "\\network\%Version%\%Build%\%sub%\" /E /S 

if not exist "\\172.19.0.4\Departement$\Development\Development RCX\RCX_M02_CSP\INTERNAL RELEASES\CI\%Version%\%Build%\%sub%%" XCOPY /y "C:\Program Files (x86)\Notepad++\readme.txt" "\\network\%Version%\%Build%\" /E /S 

ご協力いただきますようお願い申し上げます。何のために、また、私は一般的にはお勧めです引用しset構文、見てみましょう

for /F "delims=." %%j in ("%Build%") do set "Build=%%j" 

+0

「メモ帳ファイル」とは何ですか?それは*テキストファイルですよね? – aschipfl

+0

テキストファイルです。これはメモ帳ファイルに書かれています。#define MyAppVersion '4.0.0.0' #define MyFullAppVersion '4.1.0.0' #define BuildNumber '4'。 forコマンドを使うことで、私は開発者が言及した値を得ます。 – writerrajiv

+0

質問にテキストサンプルを含めてください! – aschipfl

答えて

0

あなたが後ろにピリオド.、すべてをオフに分割するために、次のコードを使用することができませんでした特殊文字がそのような問題を引き起こす可能性があります。

あなたのif existの構文はちょっと奇妙です。あなたが存在チェック中に\に先行しているが、作成中でないので、ディレクトリ%Build%がどこにあるべきか分からない。あなたはディレクトリが現在の作業ディレクトリに存在することを確認したい場合は、\の前にいない:

if not exist "%Build%\" mkdir "%Build%" 

あなたはそれが現在のドライブODのルートディレクトリに配置する場合は、その後、\ことによってそれに先行しません、しかし、これはあなたが望むものではありません。

ただし、には、\が追加されています。それを提供しないと、ファイルもチェックされます。ディレクトリを確保するためにとにかく

は、存在し、あなたはそれを作成することができ、存在するかどうかを確認する必要があり、ディレクトリがすでに存在する場合に表示されるエラーメッセージを抑制し、このようにしていない:

mkdir "%Build%" 2> nul 

あなたは唯一のグローバルワイルドカード( *?)を使用することができます...私は、私はあなたのパス指定の右にある **を解釈かどうかわからないけど、私はあなたが私に教えてしようとしていると仮定 最後のパスの要素なので、 C:\Program Files (x86)\Jenkins\jobs\**\build.txtは無効です。 C:\Program Files (x86)\Jenkins\jobs\で唯一の単一のディレクトリがある場合は、あなたがこのようにそれを得ることができます。

for /F "eol=: delims=" %%D in (' 
    dir /B /A:D /O:D "C:\Program Files (x86)\Jenkins\jobs\*" 
') do set "SubDir=%%D" 

for /D %%D in ("C:\Program Files (x86)\Jenkins\jobs\*") do set "SubDir=%%~D" 

複数のディレクトリがある場合は、あなたが最後にものを修正取得したい、あなたはこれを使用することができます

+0

ok。 "findstr Build" C:\ Program Files(x86)\ Jenkins \ jobs \ build.txt "')ビルド= %% i を設定すると、/ f" tokens = 2 "ビルド=%ビルド: '=% /F "delims ="に設定します。 %% j in( "%Build%")は "Build = %% j"を設定します。私はxcopyを使用してファイルをコピーし、フォルダが作成されます。私は値が6,7である場合、それがフォルダを作成することを確認したいと思います。あるいは、開発者によって入力された値が10進数(例えば6.5)であれば、6.5という名前のフォルダに6というフォルダを作成し、コピーが実行される。 – writerrajiv

+0

一般的には、あなたの質問の要件を変更しないでください。代わりに新しい質問をしてください!だから、基本的に 'Build'が' 6.5'を持っていればフォルダ '6'内に追加のサブフォルダ' 6.5'が必要ですが、 'Build'が' 6'を持っていればサブフォルダはありません。 – aschipfl

+0

はい。しかし、上記の情報も同様に価値がありました。 – writerrajiv

関連する問題