我正在尝试递归提取文件服务器中的一些文件信息。我能够在自己的笔记本电脑上运行以下命令。当我在处理 4TB 数据的文件服务器上运行这些命令时,它们会运行或卡住几个小时。
当我使用程序调用 TreeSize 查看目录大小时,它会遍历所有 4TB 的数据并在不到 10 分钟的时间内显示使用情况。
我的问题是,有没有办法使用 cmd 或 powershell 提取 4TB 数据中的文件信息,并且速度与 TreeSize 程序一样快?
forfiles /s /d -2/21/2017 /c "cmd /c echo @fdate, @ftime, @path" > ./myfile.csv
dir /q /s /o:d > ./myfile2.txt
答案1
您正在为每个文件执行一个新的 cmd,这非常昂贵。这并不是什么新鲜事:
将 CMD.exe 与 FORFILES 一起使用有一些缺点,FORFILES 处理的每个文件都会创建一个新进程并销毁它,因此如果循环遍历 1000 个文件,那么将打开和关闭 1000 个 CMD.exe 副本,这会影响性能。
相比之下,尺寸实用程序TreeSize 已针对速度进行了优化:
TreeSize Free 在 MFT(主文件表)上运行,扫描速度极快。扫描操作在线程中运行,因此,当 TreeSize Free 在后台运行时,您几乎可以立即看到结果。
您可以通过不调用更多可执行文件来做得更好。PowerShell 在这方面很棒,即使对于我的新手级别也是如此:
Get-ChildItem D:\path\ -recurse |
Where-Object {$_.CreationTime -and $_.CreationTime -lt "2/21/2017" } |
Select-Object FullName, LastWriteTime |
Export-Csv myfile.csv
所需的输出格式和其他文件是读者的练习。