在Windows Terminal中,我可以在同一位置执行多个命令:
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? (有点讽刺)
我可以尝试的任何其他替代方法或可以为这一切如何工作提供一些帮助。
编辑:
在Drew的帮助下,我能够使用Powershell中的Get-ChildItem
方法来做到这一点。但是,这只花费了dir /s
所需时间的一小部分。这里的主要目标是测量dir
花费的时间,因此这是强制性的。
EDIT2:
似乎将标准输出写入终端需要时间,而不是命令本身。将输出重定向到文件或> NUL
的速度要快得多。
亲切的问候。
答案 0 :(得分:0)
因此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