2017-02-01 65 views
1

我們使用Jenkins作爲我們的CI工具。目前,我已經寫了一個批處理文件,該文件從記事本文件(由開發人員編寫)獲取構建值,然後將其複製到具有構建值的網絡驅動器作爲文件夾。如何通過批處理文件創建有條件的子文件夾?

的批處理文件下面提到

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' 

我需要根據在「Build Number」中輸入的值創建文件夾。如果值是十進制的,它應該在子文件夾內創建,否則應該只有一個主文件夾。

在下面的輸入幫助下,我創建了下面的批處理文件來實現這一點,但它沒有奏效。

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 

任何幫助將不勝感激。

+0

這是什麼是一個「記事本文件」?這是一個*文本文件*,對嗎? – aschipfl

+0

這是一個文本文件。這是寫在記事本文件中,#define MyAppVersion'4.0.0.0' #define MyFullAppVersion'4.1.0.0' #define BuildNumber'4'。通過使用for命令,我得到了開發人員提到的值。 – writerrajiv

+0

請在您的問題中包含文本示例! – aschipfl

回答

0

您可以使用下面的代碼,以分割掉期.,一切的背後:

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

也看看引述set語法,這是一個我建議在一般情況下,因爲沒有特殊字符可能會導致問題。

您的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 /D %%D in ("C:\Program Files (x86)\Jenkins\jobs\*") do set "SubDir=%%~D" 

如果有多個目錄和你想獲得最後的修改之一,你可以這樣做:

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

好的。所以現在我的腳本看起來像/ f「tokens = 2」%%我在('findstr構建「C:\ Program Files文件(x86)\ Jenkins \作業\ build.txt」')設置Build = %%我 對於/ F「delims =」設置Build =%Build:'=% 「。 (「%Build%」)中的%% j設置「Build = %% j」。然後我使用xcopy複製我的文件,並創建文件夾。我想確保,如果值是6,7,它會創建一個文件夾。或者,如果開發者輸入的值是十進制的(例如6.5),它將在名爲6.5的目錄中創建一個文件夾,然後執行復制。 – writerrajiv

+0

一般來說:不要改變你的問題的要求,因爲它已經可用的答案無效!改爲問一個新問題!所以基本上你想要一個額外的子文件夾'6.5'在文件夾'6'中,如果'Build'保存'6.5',但是沒有子文件夾如果'Build'保存'6'? – aschipfl

+0

是的。但上述信息同樣有價值。 – writerrajiv

相關問題