Как выполнить команду одну за другой, каждая в отдельное время? - PullRequest
0 голосов
/ 11 июля 2019

В терминале Windows, я могу выполнять несколько команд одновременно, т.е.

echo %time% && timeout 3 && echo %time%

Однако при выполнении вышеупомянутой команды это приведет к чему-то вроде:

9:27:57.41
0 秒待っています。続行するには何かキーを押してください ... (My operating system 
is Japanese)
9:27:57.41

Как видите, echo %time% не выполняется в другое время, хотя между ними был тайм-аут в 3 секунды. Как бы я разделил эти два казни?

Конечной целью здесь является измерение времени, которое требуется для выполнения dir /s C:\.

Я пробовал разные вещи, такие как:

Powershell -C "Measure-Command {cmd /c dir /s C:\ | Output-Default}" > test.txt

или от Powershell:

Measure-Command{cmd /c dir /s C:\ | Output-Default} > test.txt

Но ни одна из этих команд не приводит к тому же результату, который я получаю при запуске только dir /s C:\ в Терминале. Существуют различия во времени и количестве файлов.

Я думал, что смогу попробовать:

echo %time% >> test & dir /s C:\ >> test & echo %time% >> test

как альтернатива Measure-Command, но это не так ...

Нечто подобное можно легко сделать в Linux, т. Е. date +%N && sleep 1 && date +%N или date +%s && sleep 1 && date +%s, так почему бы не всемогущий Powershell? (немного сарказма)

Любые другие альтернативы, которые я мог бы попробовать или пролить некоторый свет на то, как все это работает, помогли бы на тонну.

EDIT:

С помощью Дрю я смог сделать это с помощью метода Get-ChildItem в Powershell. Однако, это заняло лишь часть времени, которое потребовалось бы с dir /s. Основная цель здесь - измерить, сколько времени это займет с dir, так что это обязательно.

EDIT2:

Похоже, что для записи стандартного вывода в терминал требовалось время, а не сама команда. Перенаправление вывода в файл или > NUL было намного быстрее.

С уважением.

1 Ответ

0 голосов
/ 11 июля 2019

Так DIR /S будет сканировать все файлы в каталоге и подкаталоге. Эквивалент PowerShell это -File и -Recurse. Таким образом, на практике все команды PowerShell будут:

Measure-Command -Expression {
    Get-ChildItem -Path "C:\" -Recurse -File
} | Out-File C:\test.txt

Это даст вам только время, но не количество файлов. Чтобы получить количество файлов, вам нужно немного его изменить.

Measure-Command -Expression {
    (Get-ChildItem -Path "C:\" -Recurse -File).Count | Out-File C:\FileCount.txt
} | Out-File C:\test.txt

Кроме того, вы можете запустить это и получить что-то более приятное. и каждая задача разделена на новую строку.

$Path = "C:\"
$StartTime = Get-Date
$FileCount = (Get-ChildItem -Path $Path -Recurse -File).Count
$EndTime = Get-Date
$TimeTaken = New-TimeSpan –Start $StartTime –End $EndTime
"Found $FileCount files in $Path which took $($TimeTaken.Seconds) Seconds" | Out-File C:\test.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...