Closed kimpro82 closed 1 year ago
By ChatGPT :
.ini
파일 형식은 key=value
형식으로 데이터를 저장하는 파일 형식입니다. .ini
파일 형식을 사용하여 로그를 기록하는 .bat
파일을 작성하는 방법은 다음과 같습니다.
@echo off
setlocal
set program=myprogram.exe
set log=runtime.ini
echo Starting %program%...
:: 시간 측정을 시작합니다.
set start_time=%time%
:: 프로그램 실행
start "" /wait %program%
:: 시간 측정을 종료합니다.
set end_time=%time%
:: 실행 시간을 계산합니다.
set /a elapsed_time=(1%end_time:~0,2%-100)*3600 + (1%end_time:~3,2%-100)*60 + (1%end_time:~6,2%-100) - ((1%start_time:~0,2%-100)*3600 + (1%start_time:~3,2%-100)*60 + (1%start_time:~6,2%-100))
:: 실행 시간을 로그 파일에 저장합니다.
echo [%program%] > %log%
echo elapsed_time=%elapsed_time% >> %log%
echo Done.
pause
위 코드에서, set program=myprogram.exe
와 set log=runtime.ini
를 사용하여 실행할 .exe
파일의 이름과 실행시간을 기록할 로그 파일의 이름을 설정합니다.
set start_time=%time%
를 사용하여 실행시간을 측정하기 시작하는 시간을 기록합니다. 그리고 start
명령어를 사용하여 .exe
파일을 실행합니다. /wait
옵션은 프로그램이 실행될 때까지 대기하도록 하는 옵션입니다.
.exe
파일 실행이 종료된 후, set end_time=%time%
를 사용하여 실행시간을 측정을 종료하는 시간을 기록합니다. 그리고 set /a elapsed_time=(1%end_time:~0,2%-100)*3600 + (1%end_time:~3,2%-100)*60 + (1%end_time:~6,2%-100) - ((1%start_time:~0,2%-100)*3600 + (1%start_time:~3,2%-100)*60 + (1%start_time:~6,2%-100))
를 사용하여 실행 시간을 계산합니다. 이때, %time%
에서 시간, 분, 초를 추출하기 위해 :~
와 1
을 사용합니다.
마지막으로, echo [%program%] > %log%
를 사용하여 실행시간을 저장할 섹션 이름을 작성하고, echo elapsed_time=%elapsed_time% >> %log%
를 사용하여 실행시간을 key=value
형식으로 로그 파일에 저장합니다.
위 코드를 실행하면, .exe
파일이 실행되고 실행시간이 .ini
파일 형식으로 로그 파일에 저장됩니다. 실행시간이 저장된 로그 파일은 다음과 같은 형태로 출력됩니다.
[myprogram.exe]
elapsed_time=10
By ChatGPT :
만약 로그 파일이 존재하지 않는 경우에는, 새로운 로그 파일을 생성하여 시간 측정 결과를 저장해야 합니다. 이를 위해서, if not exist %log% echo.> %log%
를 사용하여 로그 파일이 존재하지 않는 경우에는 빈 로그 파일을 생성합니다. echo.>
는 빈 줄을 출력하여 빈 로그 파일을 생성하는 명령어입니다.
또한, 만약 여러 개의 .exe
파일을 실행하고 각각의 실행 시간을 로그 파일에 기록하려면, 위 코드를 반복하여 사용해야 합니다. 예를 들어, myprogram1.exe
, myprogram2.exe
, myprogram3.exe
를 실행하고 실행 시간을 runtime.ini
파일에 기록하는 경우, 다음과 같이 코드를 작성할 수 있습니다.
@echo off
setlocal
set log=runtime.ini
echo Starting myprogram1.exe...
call :run myprogram1.exe
echo.
echo Starting myprogram2.exe...
call :run myprogram2.exe
echo.
echo Starting myprogram3.exe...
call :run myprogram3.exe
echo.
echo Done.
pause
exit /b
:run
set program=%1
set start_time=%time%
start "" /wait %program%
set end_time=%time%
set /a elapsed_time=(1%end_time:~0,2%-100)*3600 + (1%end_time:~3,2%-100)*60 + (1%end_time:~6,2%-100) - ((1%start_time:~0,2%-100)*3600 + (1%start_time:~3,2%-100)*60 + (1%start_time:~6,2%-100))
if not exist %log% echo.> %log%
echo [%program%] >> %log%
echo elapsed_time=%elapsed_time% >> %log%
exit /b
위 코드에서, call :run myprogram1.exe
와 같은 방식으로 :run
레이블을 사용하여 코드를 분리합니다. 각각의 .exe
파일을 실행할 때마다, :run
레이블에서 set program=%1
과 같은 방식으로 실행할 .exe
파일의 이름을 설정합니다. 그리고 실행시간을 측정하고 로그 파일에 저장하는 방식은 이전과 동일합니다. 각각의 .exe
파일을 실행할 때마다, echo.
, echo [%program%]
, echo elapsed_time=%elapsed_time%
와 같은 방식으로 로그 파일에 기록합니다.
위 코드를 실행하면, 각각의 .exe
파일이 실행되고 실행시간이 .ini
파일 형식으로 로그 파일에 저장됩니다. 각 .exe
파일의 실행시간이 저장된 로그 파일은 다음과 같은 형태로 출력됩니다.
[myprogram1.exe]
elapsed_time=10
[myprogram2.exe]
elapsed_time=20
[myprogram3.exe]
elapsed_time=30
By ChatGPT :
이전 실행의 종료시간이 저장되어 있는지 확인하고, 저장되어 있지 않다면 warning 메세지를 출력하는 .bat
코드는 다음과 같습니다.
@echo off
set log_file=previous_run.ini
if exist %log_file% (
for /f "tokens=1,2,3 delims==" %%a in ('type %log_file% ^| findstr /c:"start_time=" /c:"end_time=" /c:"duration="') do (
set %%a=%%b
)
if not defined end_time (
echo Warning: 이전 실행은 비정상적으로 종료되어 종료시간이 저장되지 않았습니다.
)
)
set start_time=%date% %time%
REM 실행할 명령어
set end_time=%date% %time%
set /a duration=(%end_time:~11,2%*3600 + %end_time:~14,2%*60 + %end_time:~17,2%)-( %start_time:~11,2%*3600 + %start_time:~14,2%*60 + %start_time:~17,2%)
echo start_time=%start_time%>>%log_file%
echo end_time=%end_time%>>%log_file%
echo duration=%duration%>>%log_file%
이 코드에서는 previous_run.ini
이라는 이름의 ini 파일을 사용합니다. 해당 ini 파일에는 이전 실행의 시작시간, 종료시간, 실행시간이 저장되어 있습니다. 코드에서는 이전 실행에서 저장된 ini 파일을 읽어들여서 종료시간이 저장되어 있는지 확인합니다. 종료시간이 저장되어 있지 않다면 warning 메세지를 출력하고, 종료시간이 저장되어 있다면 이번 실행에서 종료시간을 다시 저장합니다.
By ChatGPT :
@echo off
set /a "n=%random% %% 10 + 1"
timeout /t %n% >nul
setlocal enableextensions enabledelayedexpansion
set start_time=!time!
echo %n%초가 경과되었습니다. (%start_time% ~ !time!)
endlocal
%random%
은 0부터 32767까지의 랜덤한 정수를 반환하므로, 이를 10으로 나누고 1을 더하여 1~10초 사이의 랜덤한 값을 구합니다. 이후 timeout
명령어를 이용하여 구한 값을 기다린 후, %time%
변수를 이용하여 현재 시간을 저장합니다. setlocal enableextensions enabledelayedexpansion
명령어를 이용하여 지역 변수를 활성화하고, !time!
변수를 이용하여 현재 시간을 출력합니다. 마지막으로 endlocal
명령어를 이용하여 지역 변수를 해제합니다.
Advanced from #26
Estimate the run time of the
.exe
file directly, without relying on captured image saving times indirectlyBy ChatGPT :
.exe
파일의 실행시간을 기록하는.bat
파일을 작성하는 방법은start
명령어와timeout
명령어를 사용하는 것입니다.다음은 실행시간을 기록하는
.bat
파일의 예시입니다.위 코드에서,
set program=myprogram.exe
와set log=runtime.log
를 사용하여 실행할.exe
파일의 이름과 실행시간을 기록할 로그 파일의 이름을 설정합니다.set start_time=%time%
를 사용하여 실행시간을 측정하기 시작하는 시간을 기록합니다. 그리고start
명령어를 사용하여.exe
파일을 실행합니다./wait
옵션은 프로그램이 실행될 때까지 대기하도록 하는 옵션입니다..exe
파일 실행이 종료된 후,set end_time=%time%
를 사용하여 실행시간을 측정을 종료하는 시간을 기록합니다. 그리고set /a elapsed_time=(1%end_time:~0,2%-100)*3600 + (1%end_time:~3,2%-100)*60 + (1%end_time:~6,2%-100) - ((1%start_time:~0,2%-100)*3600 + (1%start_time:~3,2%-100)*60 + (1%start_time:~6,2%-100))
를 사용하여 실행 시간을 계산합니다. 이때,%time%
에서 시간, 분, 초를 추출하기 위해:~
와1
을 사용합니다.마지막으로,
echo %program% took %elapsed_time% seconds to run. >> %log%
를 사용하여 실행시간을 로그 파일에 저장합니다.위 코드를 실행하면,
.exe
파일이 실행되고 실행시간이 로그 파일에 저장됩니다. 실행시간이 저장된 로그 파일은 다음과 같은 형태로 출력됩니다.