@echo off
set PATH=
set JAVA_HOME=
set PATH=
GOTO FUNCTION_END
:abort
   echo aborting: %EXCEPTION%
   exit /b 1
:default
   set INSTANCE_NAME=mkebsboot
set INSTANCE_HOME=/mnt/tmp
set LOG_DIR=/mnt/tmp
   exit /b 0
:mkebsboot
   set TMP_DIR=/mnt/tmp
   exit /b 0
:findPid
   set FOUND_PID=
   set _expression=%1
   shift
   set FIND_PROCESS=TASKLIST /FI "WINDOWTITLE eq %_expression%" /NH
   FOR /F "usebackq tokens=2 delims= " %%A IN (`cmd /c "%FIND_PROCESS% 2>NUL"`) DO (
      SET FOUND_PID=%%A
   )
   if defined FOUND_PID (
      exit /b 0
   ) else (
      set EXCEPTION=%_expression% not found
      exit /b 1
   )
:forget
   SETLOCAL
   set FOUND_PID=
   set NEXT_MINUTE=
   set INSTANCE_NAME=%1
   shift
   set SCRIPT=%1
   shift
   set LOG_DIR=%1
   shift
   CALL :findProcess %INSTANCE_NAME%
   if defined FOUND_PID (
      echo %INSTANCE_NAME% already running pid [%FOUND_PID%]
   ) else (
      CALL :nextMinute
      set _DATE=%DATE:~4%
      set CMD=schtasks /create /sd %_DATE% /tn %INSTANCE_NAME% /ru System /tr "cmd /c title %INSTANCE_NAME%&%SCRIPT% >%LOG_DIR%\stdout.log 2>%LOG_DIR%\stderr.log" /sc:once /st %NEXT_MINUTE%
      echo %INSTANCE_NAME% will start at %NEXT_MINUTE%
      set SECONDS=%TIME:~6,2%
      set /a SECOND=60-SECONDS
      %CMD% >NUL
      ping -n %SECONDS% 127.0.0.1 > NUL 2>&1
      CALL :findProcess %INSTANCE_NAME%
      if not defined FOUND_PID (
         set EXCEPTION=%INSTANCE_NAME% did not start
         abort
      )
   ) 
   exit /b 0
:FUNCTION_END
set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem
if not "%1" == "init" if not "%1" == "status" if not "%1" == "stop" if not "%1" == "start" if not "%1" == "tail" if not "%1" == "tailerr" if not "%1" == "run" (
   set EXCEPTION=bad argument: %1 not in init status stop start tail tailerr run
   goto abort
)
goto CASE_%1
:CASE_init
   call :default
   if errorlevel 1 goto abort
   call :mkebsboot
   if errorlevel 1 goto abort
   md %INSTANCE_HOME%
   del %INSTANCE_HOME%\mkebsboot.cmd 2>NUL
   echo @echo off>>%INSTANCE_HOME%\mkebsboot.cmd
   echo title mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set INSTANCE_NAME=mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set TMP_DIR=%TMP_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set INSTANCE_NAME=%INSTANCE_NAME%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set INSTANCE_HOME=%INSTANCE_HOME%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set LOG_DIR=%LOG_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo cd /d %%INSTANCE_HOME%%>>%INSTANCE_HOME%\mkebsboot.cmd
   md %INSTANCE_HOME%
   del %INSTANCE_HOME%\mkebsboot.cmd 2>NUL
   echo @echo off>>%INSTANCE_HOME%\mkebsboot.cmd
   echo title mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set INSTANCE_NAME=mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set TMP_DIR=%TMP_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set INSTANCE_NAME=%INSTANCE_NAME%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set INSTANCE_HOME=%INSTANCE_HOME%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo set LOG_DIR=%LOG_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo cd /d %%INSTANCE_HOME%%>>%INSTANCE_HOME%\mkebsboot.cmd
   echo exit /b 0 >>%INSTANCE_HOME%\mkebsboot.cmd
   GOTO END_SWITCH
:CASE_status
   call :default
   if errorlevel 1 goto abort
   call :findPid %INSTANCE_NAME%
   if errorlevel 1 goto abort
   echo [%FOUND_PID%]
   GOTO END_SWITCH
:CASE_stop
   call :default
   if errorlevel 1 goto abort
   call :findPid %INSTANCE_NAME%
   if errorlevel 1 goto abort
   if defined FOUND_PID (
      TASKKILL /F /T /PID %FOUND_PID% >NUL
   )
   GOTO END_SWITCH
:CASE_start
   call :default
   if errorlevel 1 goto abort
   call :forget %INSTANCE_NAME% %INSTANCE_HOME%\%INSTANCE_NAME%.cmd %LOG_DIR%
   if errorlevel 1 goto abort
   GOTO END_SWITCH
:CASE_tail
   call :default
   if errorlevel 1 goto abort
   tail %LOG_DIR%\stdout.log
   GOTO END_SWITCH
:CASE_tailerr
   call :default
   if errorlevel 1 goto abort
   tail %LOG_DIR%\stderr.log
   GOTO END_SWITCH
:CASE_run
   call :default
   if errorlevel 1 goto abort
   %INSTANCE_HOME%\%INSTANCE_NAME%.cmd
   GOTO END_SWITCH
:END_SWITCH
exit /b 0
