如何通过PowerShell从文件中查找文件?

q43xntqr  于 2022-12-13  发布在  Shell
关注(0)|答案(2)|浏览(282)

我有一个excel脚本来搜索命令中的文件。
我在论坛上发现了这个例子,声明说要按名称搜索文件,需要写下名称并发送(*),但当请求时,它找不到任何东西

Get-ChildItem -Path "C:\\Folder\\test\*"

我能做些什么来简化代码,使它更快。等待10分钟,找到一个文件出10000。这是非常长的
我有一个包含10,000个文件的文件夹,Excel在VBA中搜索脚本几乎只需2-3秒。

$find = Get-ChildItem -Path "C:\\Folder"
for ($f=0; $f -lt $find.Count; $f++){
$path_name = $find\[$f\].Name
if($path_name-eq 'test'){
Write Host 'success'
}
}

但它原来soooooooo长,脚本挂了10分钟,没有响应,也许他会幸运地回答.我如何找到一个文件通过过滤器使用

Get-ChildItem
soat7uwm

soat7uwm1#

若要加快搜索速度,可以使用Get-ChildItem筛选器

$fileName = "test.txt"

$filter = "*.txt"

$status = Get-ChildItem -Path "C:\PS\" -Recurse -Filter $filter | Where-Object {$_.Name -match $fileName}

if ($status) {
Write-Host "$($status.Name) is found"
} else {

Write-Host "No such file is available"
}

您还可以使用Measure-Command比较搜索速度

f8rj6qna

f8rj6qna2#

  • 如果数据所在的磁盘速度很慢,那么无论你做什么,它都会很慢。
  • 如果文件夹中的文件太多,那么运行速度也会很慢,这取决于系统的RAM容量。每个文件夹中的文件越少,性能就越高,所以如果可能的话,请尝试将它们分成几个文件夹。这样做也意味着您可以使用PSJobs一次运行几个Get-ChildItem(磁盘允许)。
  • 使用多个循环来处理一个相关的问题通常会使整个过程运行“循环数”倍的时间。这就是Where-Object的作用(除了-Filter-Include-Exclude flags to Get-ChildItem ′)。
  • 控制台I/O需要很多时间。除非必须,否则不要输出任何内容,尤其是不要在循环(或类似循环的cmdlet)内输出。

例如,包括基本统计:

$startTime = Get-Date
$FileList  = Get-ChildItem -Path "C:\Folder" -File -Filter 'test'
$EndTime   = Get-Date

$FileList

$AfterOutputTime = Get-Date

'Seconds taken for listing:'
(EndTime - $startTime).TotalSeconds

'Seconds taken including output:'
($AfterOutputTime - $StartTime).TotalSeconds

相关问题