Windows PowerShell の機能
powershell -C "(Measure-Command { .\HogeHoge.bat | Out-Default }).TotalSeconds"
メモ:
* 秒だけ欲しいので .TotalSeconds
* ミリ秒で欲しいときは .TotalMilliseconds
* .\ をつけないと不明なコマンドになる
* 標準出力が欲しい場合は " | Out-Default" をつける
* 標準エラーはコマンドだけで出る
powershell -C "(Measure-Command { .\HogeHoge.bat | Out-Default }).TotalSeconds"
rem 管理者権限があるかどうかチェック whoami /PRIV | find "SeLoadDriverPrivilege" >NUL if not errorlevel 1 goto start rem ない場合は powershell 経由で自分自身を実行 powershell.exe -Command Start-Process "%~0" -Verb Runas goto :EOF :start rem ここからバッチ本来の処理
@echo off
pushd "%~dp0"
if "x%~1" == "x" (
call :target_jenkins_home
if errorlevel 1 goto error
) else (
call :target_command_line %*
if errorlevel 1 goto error
)
SET TARGET_PATH
if errorlevel 1 goto error
SET ERRORCODE=0
for /D %%d in ( "%TARGET_PATH%\jobs\*" ) do (
@echo %%~nd
if exist "%%d\nextBuildNumber" (
for /f %%i in ( %%d\nextBuildNumber ) do (
call :checkbuildnumber %%d %%i
if errorlevel 1 (
SET ERRORCODE=1
)
)
)
)
if "%ERRORCODE%" == "1" goto error
goto end
:checkbuildnumber
SET NEXT=%~2
rem @echo next build number %NEXT%
SET MAXNUM=0
setlocal enabledelayedexpansion
for /D %%d in ( "%~1\builds\*" ) do (
call :getbuildlognumber %%d
SET CURNUM=!errorlevel!
if !CURNUM! gtr !MAXNUM! (
SET MAXNUM=!CURNUM!
)
)
rem @echo !MAXNUM!
if %NEXT% lss !MAXNUM! (
@echo "Warning: next build number [%NEXT%] is smaller than the number of the log [!MAXNUM!]."
exit /b 1
)
endlocal
exit /b 0
:getbuildlognumber
if not exist "%~1\build.xml" exit /b 0
for /f "tokens=1,2,3,4* delims=<>" %%a in ( %~1\build.xml ) do (
if "%%b" == "number" (
exit /b %%c
)
)
exit /b 0
:target_command_line
if not exist "%~1" (
@echo %~1 は存在しません。
exit /b 1
)
SET TARGET_PATH=%~1
exit /b 0
:target_jenkins_home
SET JENKINS_HOME >NUL
if errorlevle 1 (
@echo JENKINS_HOME が設定されていません。
exit /b 1
)
SET TARGET_PATH=%JENKINS_HOME%
exit /b 0
:error
popd
@echo failed.
pause
exit /b 1
:end
popd
exit /b 0
import hudson.model.AbstractProject
def jenkins = hudson.model.Hudson.instance
def projects = jenkins.getAllItems(AbstractProject.class)
projects.each { project ->
def lastBuild = project.getLastBuild()
if( lastBuild != null )
{
def lastNumber = lastBuild.getNumber()
def nextNumber = project.getNextBuildNumber()
if( nextNumber < lastNumber )
{
manager.listener.logger.println(project.getName())
manager.listener.logger.println("Warning: next build number [${nextNumber}] is smaller than the number of the log [${lastNumber}].")
manager.buildUnstable()
}
}
}
@echo off
pushd "%~dp0"
if "x%~1" == "x" (
call :target_jenkins_home
if errorlevel 1 goto error
) else (
call :target_command_line %*
if errorlevel 1 goto error
)
SET TARGET_PATH
if errorlevel 1 goto error
for /D %%d in ( "%TARGET_PATH%\jobs\*" ) do (
@echo %%~nd
if exist "%%d\nextBuildNumber" (
for /f %%i in ( %%d\nextBuildNumber ) do (
call :repairbuildnumber %%d %%i
)
)
)
goto end
:repairbuildnumber
SET NEXT=%~2
rem @echo next build number %NEXT%
SET MAXNUM=0
setlocal enabledelayedexpansion
for /D %%d in ( "%~1\builds\*" ) do (
call :getbuildlognumber %%d
SET CURNUM=!errorlevel!
if !CURNUM! gtr !MAXNUM! (
SET MAXNUM=!CURNUM!
)
)
rem @echo !MAXNUM!
if %NEXT% lss !MAXNUM! (
@echo "Warning: next build number [%NEXT%] is smaller than the number of the log [!MAXNUM!]."
SET /a NEWNUM=!MAXNUM!+1
@echo new next build number !NEWNUM!
@echo !NEWNUM!| sed 's/\n//g'> "%~1\nextBuildNumber"
)
endlocal
exit /b 0
:getbuildlognumber
if not exist "%~1\build.xml" exit /b 0
for /f "tokens=1,2,3,4* delims=<>" %%a in ( %~1\build.xml ) do (
if "%%b" == "number" (
exit /b %%c
)
)
exit /b 0
:target_command_line
if not exist "%~1" (
@echo %~1 は存在しません。
exit /b 1
)
SET TARGET_PATH=%~1
exit /b 0
:target_jenkins_home
SET JENKINS_HOME >NUL
if errorlevle 1 (
@echo JENKINS_HOME が設定されていません。
exit /b 1
)
SET TARGET_PATH=%JENKINS_HOME%
exit /b 0
:error
popd
@echo failed.
pause
exit /b 1
:end
popd
pause
exit /b 0