명령 줄 도구를 가장 쉽게 시간을내는 방법


9

명령 줄 도구를 가장 쉽고 빠른 방법은 무엇입니까?

몇 분 또는 1 시간 이상 걸릴 것으로 예상되므로 매우 정확하지 않아도됩니다 (+/- 초는 괜찮습니다). 그리고 배치 파일을 작성하는 것도 좋습니다. 또한 시간에 따라 계산할 필요가 없으며 시작 시간과 종료 시간 만 표시하면됩니다.


Stackoverflow에 속할 수 있습니다.
Joey

2
이것을 작동시키기 위해 무언가를 "프로그래밍"해야한다면 ... 해결책이 너무 복잡합니다. 이를 위해 몇 가지 명령 줄 도구 나 간단한 배치 솔루션이 있어야합니까?
slolife

Serverfault에서 더 가능성이 높습니다.
Kirill V. Lyadvinsky

일반적으로 OS는 사용 된 CPU 시간에 대해서만 관심을 갖습니다. 아래 내 대답은 당신이 원하는 것을 할 것입니다. 정보를 저장하기 위해 로그 파일을 사용합니다.
Axxmasterr

답변:


19

나는 보통

echo.|time & my_command & echo.|time

내가 손에 아무것도 없을 때. 다음과 같은 출력이 발생합니다.

> echo. | 시간 및 핑 -n 4 로컬 호스트> nul & echo. | time
현재 시간 : 18 : 42 : 34,63
새로운 시간을 입력하십시오 :
현재 시간 : 18 : 42 : 37,68
새로운 시간을 입력하십시오 :

findstr에 파이핑하여 예쁘지 않고 더 예쁘게 만들 수 있습니다.

echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current

확장이 기본적으로 활성화되어 있거나 /v:on인수로 cmd를 시작한 경우 echo !time!입력 리디렉션으로 추악한 해킹에 의존하지 않고도 사용할 수 있습니다 .

배치 파일을 사용하려면 다음과 같이하십시오.

@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%

stdout과 stderr 모두에 대해 nul에 리디렉션을 추가했습니다. 그렇지 않으면 시작 및 끝 줄을 찾기가 어려울 수 있습니다. 걱정하지 않으면 제거 할 수 있습니다.

그러나 요즘 저는 대부분 TimeThis를 사용 합니다.

PowerShell은 다음과 같은 방법도 제공합니다.

Measure-Command { my_command }

그러나 작업 디렉토리 또는 리디렉션에 의존하는 것에주의해야합니다. 제대로 작동하려면 약간의 속임수가 필요할 수 있습니다.

@echo off
setlocal enableextensions

rem Prepare current directory and command line so they
rem can be stuck into a single-quoted PowerShell string.
set "Dir=%CD:'=''%"
set "Cmd=%*"
set "Cmd=%Cmd:'=''%"

rem Prepare command to pass to PowerShell
set Command=
set "Command=&{"
set "Command=%Command%  Set-Location '%Dir%'"
set "Command=%Command%; [Environment]::CurrentDirectory = '%Dir%'"
set "Command=%Command%; $start = Get-Date"
set "Command=%Command%; Write-Host '    Command line : %Cmd%'"
set "Command=%Command%; Write-Host ('    Start time   : ' + $start.ToString())"
set "Command=%Command%; Write-Host"
set "Command=%Command%; iex 'cmd /c %Cmd%'"
set "Command=%Command%; $end = Get-Date"
set "Command=%Command%; Write-Host"
set "Command=%Command%; Write-Host '    Command line : %Cmd%'"
set "Command=%Command%; Write-Host ('    Start time   : ' + $start.ToString())"
set "Command=%Command%; Write-Host ('    End time     : ' + $end.ToString())"
set "Command=%Command%; Write-Host ('    Elapsed time : ' + ($end - $start).ToString())"
set "Command=%Command%; }"

powershell -noprofile -command "%Command%"

endlocal

이것은 같은 방식으로 실행될 수 있습니다 . 명령 행에 필요한 경우 timethis큰 따옴표를 피하십시오 \"(동일 함 timethis). 생산량은 비슷합니다. 그래도 리디렉션은 작동하지 않습니다.


시간 Windows 2000 리소스 키트에서 제공되며 더 이상 사용할 수 없습니다. 2003 년 리소스 키트는 TimeIt이며 64 비트 Win7에서 작동하지 않았습니다. PowerShell 솔루션에 대해서는 superuser.com/questions/228056/…
pesche

짜증나 그래도 실행 파일은 여전히 ​​옛날부터 여기에 있습니다.
Joey

@pesche :에 대한 드롭 인 대체 역할을 할 수있는 배치 파일을 추가했습니다 timethis.
Joey

4

시스템 스케줄러를 사용하여 명령을 실행할 수 있습니다.

제어판-> 예약 된 작업-> 새로 만들기 ....

예약 된 작업을 실행하려는 명령을 가리키면 원하는 작업을 수행해야합니다.

시간 상태 정보를 저장하는 로그 파일을 작성하려는 경우 위 스크립트와 유사한 작업을 고려할 수 있습니다.

날짜와 시간을 반영하기 때문에 "지금"이라는 유틸리티를 사용합니다. 이 기능은 로그 파일에서 추적하고 싶지만 기본적으로 날짜 / 시간을 포함시킬 수있는 명령 줄 스크립트에는 매우 유용합니다. 응답에 신경 쓰지 않고 매우 편리합니다.

이제 Utlity를 찾을 수 있습니다

스크립트 예는 다음과 같습니다.

echo -------------- >>logfile.txt
now Process Starting>> logfile.txt
<commandhere> <target> >> logfile.txt
now process Ending >> logfile.txt
echo -------------- >> logfile.txt

샘플 출력은 다음과 같습니다

--------------
Mon Mar 06 14:58:48 2009 Process Starting
GNU Super Duper Process PID 12345! Success
Mon Mar 06 21:47:01 2009 Process Ending
--------------

4

다른 옵션은 설정할 시간을 묻지 않고 현재 시간을 콘솔로 보내거나 로그로 리디렉션 하는 time명령 을 사용 /t하는 것입니다. 시간, 분은 제공하지만 초와 밀리 초는 제공하지 않는다는 제한이 있습니다.

call time /t  > myLog.log
call mybat   >> myLog.log
call time /t >> myLog.log

불행히도 "time / t"는 초를 출력하지 않고 "hour : minute am / pm"만 출력합니다.
slolife

바로 당신입니다, 나는 대답을 업데이트했습니다.
akf

1

powershell을 사용하는 경우이 작업을 수행 할 수 있습니다 (가독성을 위해 한 줄로 나눠서).

PS C:\> $startTime=Get-Date;ping /n 4 localhost;$endTime=Get-Date;
        echo "Finished in $(($endTime-$startTime).ToString())"

또는 쉽게 재사용 할 수 있도록 파일로 저장하십시오.

# usage: .\timer.ps1 program [arguments]

$startTime = Get-Date;
$prog = $args[0];
$progargs = $args[1..($args.length-1)];

&$prog $progargs

$endTime = Get-Date;

echo "Finished in $(($endTime - $startTime).ToString())";

1
In command prompt:
 wmic path win32_operatingsystem get LocalDateTime
 wmic path win32_operatingsystem get LocalDateTime
 wmic path win32_operatingsystem get LocalDateTime

Output:
C:\Users\Steini> wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.370000+000

C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.525000+000

C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.627000+000

클립 보드에서 Ctrl + v를 사용하여 15,5ms 및 10,2ms


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.