[英]Jenkins job is failing with for loop in command
在 Jenkins 中,我嘗試在 BAT 文件中實現的命令很少。 所以我有 2 個 BAT 文件(RUN.BAT 和 CHANGE.BAT)。 在 RUN.BAT 中,命令如下:
CD\
E:
CD E:\RESULTS\1
mkdir 1
xcopy E:\I1\0 E:\RESULTS\1
上面的給定命令會將 Go 到特定文件夾並創建一個名為“1”的文件夾,然后 XCOPY 行會將內容從文件夾“O”復制到文件夾“1”。
現在讓我們來 CHANGE.BAT 這里的命令是:
for /f "tokens=1-7 delims=-:. " %%a in ("%date% %time%") do ren E:\RESULTS\1 %%a%%b%%c_%%d%%e%%f%%g
此命令會將文件夾名稱更改為當前系統的日期和時間。
這是問題所在,當我在我的 CMD 上調用上述 bat 文件時,它們運行良好。 但同樣不適用於 JENKINS 並拋出“命令的語法不正確”。
我無法理解的是,.bat 文件在 CMD 中有效,但在 Jenkins 中無效。
請指導我。
兩個批處理文件RUN.BAT
和CHANGE.BAT
可以用一個命令行替換為一個批處理文件:
@for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do @%SystemRoot%\System32\robocopy.exe "E:\I1\0" "E:\RESULTS\%%I-%%J-%%K_%%L%%M%%N" /E /R:3 /W:2 /NDL /NFL /NJH /NJS & goto :EOF
ROBOCOPY是XCOPY的替代品,自 Windows Vista 和 Windows Server 2003 起默認可用。
首先使用無效的源目錄路徑執行ROBOCOPY ,以獲取 output ROBOCOPY的錯誤消息,其中包含區域獨立格式的當前日期和時間。 區域無關格式意味着日期和時間的格式不依賴於為使用的帳戶配置的國家/地區,它是 Jenkins 作為服務運行的內置本地系統帳戶。 這很可能是命令REN出現錯誤消息 output 的原因。 與使用用戶帳戶執行批處理文件相比,使用系統帳戶設置執行批處理文件時的新文件夾名稱不同。
然后使用正確的源目錄路徑和目標目錄路徑再次運行ROBOCOPY ,其中yyyy-MM-dd_hhmmss
作為E:\RESULTS
中的目錄名稱。
如果目標目錄不存在, ROBOCOPY會像XCOPY一樣自動創建整個目錄樹到目標目錄。
goto:EOF
命令需要在復制文件后結束批處理文件執行,因為ROBOCOPY輸出錯誤的第二行,否則FOR也將處理該行。 如果有更多行要執行,則可以將預定義的 label :EOF
替換為寫在下一行的任何其他 label :
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do %SystemRoot%\System32\robocopy.exe "E:\I1\0" "E:\RESULTS\%%I-%%J-%%K_%%L%%M%%N" /E /R:3 /W:2 /NDL /NFL /NJH /NJS & goto FilesCopied
:FilesCopied
rem More command lines to execute.
endlocal
為了完整起見,解決方案也適用於 Windows XP 和所有更高版本的 Windows 版本:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "CurrentDateTime=%%I"
set "CurrentDateTime=%CurrentDateTime:~0,4%-%CurrentDateTime:~4,2%-%CurrentDateTime:~6,2%_%CurrentDateTime:~8,6%"
%SystemRoot%\System32\xcopy.exe "E:\I1\0" "E:\RESULTS\%CurrentDateTime%\" /I /R /Q /Y >nul
endlocal
有關ROBOCOPY首次使用無效的源目錄路徑運行 output 時的 output 是什么以及FOR如何處理此 output 的完整說明,請參閱午夜后時間設置錯誤。 在同一個答案中詳細解釋了帶有WMIC的 Windows XP 解決方案。
要了解使用的命令及其工作原理,請打開命令提示符window,在其中執行以下命令,並仔細閱讀每個命令顯示的所有幫助頁面。
echo /?
endlocal /?
for /?
goto /?
if /?
robocopy /?
set /?
setlocal /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?
xcopy /?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.