Найпростіший спосіб ввімкнути інструмент командного рядка


9

Який найпростіший / швидкий спосіб ввести інструмент командного рядка?

Це не повинно бути надто точним (+/- секунд - це нормально), оскільки я думаю, що це займе хвилин або навіть 1 годину +. І написання пакетного файлу теж чудово. Крім того, не потрібно робити розрахунки вчасно, просто відображати час початку і час закінчення.


Можливо, належатимуть на Stackoverflow.
Joey

2
Якщо мені доведеться щось «запрограмувати», щоб це спрацювало ... рішення занадто складне. Для цього повинен бути якийсь інструмент командного рядка або просте пакетне рішення, ні?
slolife

Більш імовірно на Serverfault.
Кирило В. Лядвінський

Як правило, ОС піклується лише про те, скільки часу використовується процесор. Моя відповідь нижче зробить те, що ти хочеш. Я просто використовую файл журналу для зберігання інформації.
Axxmasterr

Відповіді:


19

Я зазвичай використовую

echo.|time & my_command & echo.|time

коли мені нічого більше під рукою немає. Це призводить до отримання результатів, таких як:

> echo. | час & ping -n 4 localhost> nul & echo. | час
Поточний час: 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 році набір ресурсів 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

На жаль, "час / т" не видає секунди, а лише "година: хвилина ранку / вечір".
slolife

Право ви є, я оновив відповідь.
akf

1

Якщо у вас є оболонка повноважень, ви можете зробити це (всі одні рядки, розбиті на предмет читабельності):

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

15,5 мс і 10,2 мс за допомогою Ctrl + v з буфера обміну


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.