UNIX“time”명령과 동등한 Windows


69

따라서 Unix에는 time사용자가 코드 / 기타 시간을 지정할 수 있는 명령이 있습니다. Windows 명령 줄에 비슷한 것이 있는지 궁금합니다.

또한 Linux 명령 줄에 관한 이전 질문을 여기에서했습니다 . Windows에서도 똑같이 할 수 있습니까? 그렇다면 어떻게?


2
Windows에는 표준 cmd.exe가 있지만 Linux 버전에 더 가까운 것을 원한다면 powershell을 얻으십시오.
기예르모 Siliceo Trueba


나는 Windows 7을 사용하고 있으며 위에 게시 된 솔루션을 시도했습니다. 다음과 같은 오류가 발생 Unable to query system performance data (c0000004)합니다.. 나는 그것을 봤고 다른 사람도 똑같은 문제가 있었지만 포럼은 해결책을 제안하지 않았다. 어쨌든 제안에 감사드립니다. 누군가 다른 부분을 제안 할 수 있습니까?
efficiencyIsBliss

@eff, timeit.exe는 서버 2003 및 XP AFAIK 용이며 7과 호환되지 않는다고 생각합니다.
John T

답변:


57

Powershell 사용

Measure-Command {start-process whateveryouwantexecute -Wait}

필요에 따라 @efficiencylsBliss 편집 :

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}

내가 시도한 것은 다음과 같습니다 Measure-Command {java test <inputfile> -Wait}.. 시간 관련 통계 목록이 있지만 코드의 출력은 없습니다. 내가 뭔가 잘못하고 있습니까?
efficiencyIsBliss

@efficiency : start-process명령을 잊었습니다 .
Sasha Chedygov

Start-Process : '. \ 6-8.txt'인수를 허용하는 위치 매개 변수를 찾을 수 없습니다. 1 행 : char : 31 + Measure-Command {start-process <<<< java. \ dancebattle. \ 6-8.txt -wait} + CategoryInfo : InvalidArgument : (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
EfficiencyIsBliss

1
를 사용하여 Python 스크립트를 실행하는 데 걸리는 시간을 측정하려고합니다 Measure-Command {start-process \Python27\python test.py -Wait}. 프로세스를 실행하기 위해 새 cmd 창이 열리지 만 실행이 끝나면 창이 닫힙니다. 스크립트의 출력도보고 싶습니다. 창을 열어 두려면 어떻게해야합니까?
존 피터 톰슨 Garcés

2
@ JohnPeterThompsonGarcés는 start-process cmdlet의 -NoNewWindow 매개 변수를 사용합니다.
mjsr

21

Win XP를 사용하고 있는데 어떤 이유로 든 timeit.exe작동하지 않습니다. 다른 대안을 찾았습니다. ptime:

ptime 1.0-프로그램 실행 시간을 정확하게 측정

ptime은 지정된 명령 및 매개 변수를 실행하고 실행 시간 (런타임)을 초 단위로 정확하게 측정합니다 (5 밀리 초 이상). 자동 프로세스 타이머 또는 벤치 마크 목적으로 사용되는 프로그램 타이머입니다.


ptime에는 하나의 작은 버그가 있습니다. 의 Ptime에도 항상 오류와 "아이"프로그램 종료하는 경우, 오류 수준 0을 반환
유라 Shinkarev

매우 간단하고 정확한 출력.
janpio

Win10에서 잘 작동하는 것 같습니다.
mivk

18

배치 스크립트로 약간의 부정 행위를 할 수 있습니다 ...

@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul

그런 다음이 스크립트에 대한 인수로 프로그램을 실행하십시오 ...

timer myprogram.exe

그리고 논쟁을 위해 ...

timer "myprogram.exe -sw1 -sw2"

출력 예 :

17:59:20.02
some text
17:59:20.03

배치 스크립트를 PATH 변수 어딘가에 배치 C:\Windows\System32하고 이름을 지정하십시오 timer.cmd. 물론 두 번째 cmd 인스턴스를 포크해도 성능이 약간 저하됩니다.


프롬프트가 작동하지 않으면 @echo off echo %time% < nul cmd /c %1 echo %time% < nul 환경 변수에서 닫는 비율 (?)을

% 1과 같은 명령 행 매개 변수에는 닫는 %가 없습니다. 그게 무슨 뜻입니까?
Andrew J. Brehm

2
당신은 왜 리디렉션 것 nul 으로 echo ? echo입력을 읽지 않습니다.
Joey

1
당신은 변경할 수 있습니다 cmd /c %1cmd /c %*당신이 명령 인수에 대한 인용 부호를 저장할 수 있도록,
stanleyxu2005

3

timeWindows의 Unix와 직접적으로 동등한 것은 없습니다 .

University of Georgia에는 Unix 사용자를위한 간단한 Windows 명령 목록이 있습니다.

이전 Windows 명령 프롬프트와 .bat 스크립팅이 Unix 쉘에 비해 다소 제한적이지만 파일 등을 반복하는 기능이 있습니다. CommandWindows.com에는 몇 가지 팁이 있습니다.

당신도 설치할 수있을뿐 아니라 bashWindows에서 (Cygwin에서 설치하여 예) 또는 (I 동등한 일을하는 수단을 가지고 가정입니다) Windows PowerShell을 배웁니다.


2

코드 출력은 파일로 파이프 될 수 있습니다. java test <inputfile> | Out-File d:\a.txt

시간을 측정하려면 Measure-Commmand에 캡슐화해야합니다.

Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}


2

Measure-Command와 함께 PowerShell을 사용하려고하면 예기치 않은 문제가 발생할 수 있습니다. 내 명령>리디렉션을 사용하여 이진 데이터를 파일에 기록 하지만 PowerShell 은 파일의 시작 부분에 BOM 을 추가하고 모든 쓰기 후에 CRLF 줄 바꿈을 추가했습니다!


1

커피가 도움이되었습니다.

function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }

그리고 아무것도 출력하지 않으려면 out-null로 바꾸십시오.

function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }

다음과 같이 사용하십시오.

PS C:\> time sleep 5


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 990
Ticks             : 49906722
TotalDays         : 5,77624097222222E-05
TotalHours        : 0,00138629783333333
TotalMinutes      : 0,08317787
TotalSeconds      : 4,9906722
TotalMilliseconds : 4990,6722



PS C:\>

1

사용하기 쉽도록 초콜릿 패키지는 다음과 같습니다. https://chocolatey.org/packages/ptime C:/> choco install ptime

그렇다면 ptime유닉스 버전과 같은 역할을하고 콘솔 출력을 생성한다는 이점 이 있습니다 Measure-Command { XXX }(적어도 어떻게 해야할지 모르겠습니다).


0

'시간'명령을 얻는 몇 가지 옵션이 있습니다. 선호하는 것은 Cygwin (UNIX와 같은 time명령 과 함께 제공됨 )을 설치 하는 것입니다 .

또는 스크립트를 작성하고 경로에 추가하여 전체 경로를 지정하지 않고 실행할 수 있습니다.

당신이있는 경우 PowerShell을 - 가능 ( '. EXE'등 파일을 호출 할 때 작동합니다.),이 스크립트를 시도

$start = get-date
if ($args.length -gt 1) {
start-process $args[0] $args[1..$args.length] -workingdirectory $pwd -nonewwindow -wait
} else {
start-process $args[0] -workingdirectory $pwd -nonewwindow -wait
}
$end = get-date
$elapsed = $end - $start
write-host $end-$start
# datetime format
write-host $elapsed
# easy-to-read format
echo $elapsed

예를 들어 다음과 같이 코드를 실행하십시오.

time.ps1 python program.py

Batch을 사용하여 여기 (Stackoverflow.com) 의 가장 인기있는 답변 중 하나를 제안합니다 . 둘 다 복사하여 붙여 넣기 만하면됩니다. paxdiablo의 솔루션 을 사용하는 경우 교체해야합니다.

ping -n 11 127.0.0.1 >nul: 2>nul: 

%*

0

gnomon 은 명령의 총 실행 시간뿐만 아니라 라인 측정을위한 라인도 필요한 경우 좋은 솔루션입니다.

타임 스탬프 정보를 다른 명령의 표준 출력 앞에 추가하는 명령 줄 유틸리티입니다. 오래 걸리는 것에 대한 역사적 기록을 원하는 장기 실행 프로세스에 유용합니다.

를 실행하여 설치 한 npm install -g gnomon다음을 통해 사용하십시오 command | gnomon.

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