Самый простой способ времени инструмент командной строки

12276
slolife

Какой самый простой / быстрый способ рассчитать время инструмента командной строки?

Он не должен быть супер точным (+/- секунды в порядке), так как я ожидаю, что это займет минуты или даже 1 час +. И написание командного файла тоже хорошо. Кроме того, он не должен выполнять вычисления вовремя, просто отображать время начала и время окончания.

9
Может принадлежать на Stackoverflow. Joey 15 лет назад 0
Если мне нужно что-то «запрограммировать», чтобы заставить это работать ... решение слишком сложное. Для этого должен быть какой-то инструмент командной строки или простое пакетное решение, нет? slolife 15 лет назад 2
Скорее на Serverfault. Kirill V. Lyadvinsky 15 лет назад 0
Обычно ОС заботится только о том, сколько процессорного времени она использовала. Мой ответ ниже сделает то, что вы хотите. Я просто использую файл журнала для хранения информации. Axxmasterr 15 лет назад 0

6 ответов на вопрос

19
Joey

Я обычно использую

echo.|time & my_command & echo.|time 

когда у меня больше ничего нет под рукой. Это приводит к выводу, подобному следующему:

> echo. | time & ping -n 4 localhost> 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 

Если вы включили отложенное расширение по умолчанию (или запустили cmd с /v:onаргументом в качестве аргумента), вы также можете просто использовать его, echo !time!не прибегая к уродливым хаки с перенаправлением ввода.

Если вы хотите использовать командный файл, вы можете сделать это следующим образом:

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

Я добавил перенаправление в nul для stdout и stderr, потому что в противном случае может быть трудно найти начальную и конечную строки. Вы можете удалить это, если это вас не касается.

Но в настоящее время я в основном использую 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как и). Произведенная продукция похожа. Перенаправление не будет работать, хотя.

TimeThis из набора ресурсов Windows 2000 и больше не доступен; в 2003 году Resource Kit был TimeIt, который не работал на моей 64-битной Win7. Для решения PowerShell см. Http://superuser.com/questions/228056/windows-equivalent-to-unix-time-command. pesche 10 лет назад 0
Это отстой. У меня все еще есть исполняемый файл, который лежал здесь с давних времен. Joey 10 лет назад 0
@pesche: я добавил командный файл, который может служить заменой `timethis`. Joey 10 лет назад 0
4
Axxmasterr

Вы можете использовать системный планировщик для запуска команды для вас.

Панель управления -> Запланированные задачи -> создать новый ....

Просто укажите запланированное задание на команду, которую вы хотите запустить, и она должна делать то, что вы хотите.

Если вы хотите создать файл журнала, в котором хранится информация о состоянии времени, вы можете подумать о том, чтобы сделать что-то похожее на скрипт выше.

Для этого я использую утилиту под названием «сейчас», которая будет отображать дату и время. Это очень удобно для сценариев командной строки, которые вы хотите отслеживать в файлах журналов, но у которых нет смысла для непосредственного включения даты / времени. Очень удобно, так как не заботится об ответе и исчезает, когда вы закончите с ним.

Теперь 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
akf

Другой вариант - использовать timeкоманду, с помощью /tкоторой будет выводиться текущее время на консоль (или перенаправляться в журнал) без запроса времени, которое нужно установить. есть ограничение в том, что оно даст вам часы, минуты, но не секунды и миллисекунды.

call time /t > myLog.log call mybat >> myLog.log call time /t >> myLog.log 
К сожалению, «время / t» не выводит секунды, просто «час: минута утра / вечера». slolife 15 лет назад 0
да, я обновил ответ. akf 15 лет назад 0
1
roufamatic

If you have powershell, you can do this (all one line, broken up for readability):

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

Or save this to a file for easier reuse.

# 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
Steini
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 

15,5 мс и 10,2 мс, используя Ctrl + v из буфера обмена

0
Vadzim

Пользователи Far Manager 1.x могут рассмотреть плагин Timer .