该目录中有20k个文件夹.这些文件夹中有子文件夹和一些文件.我不需要查看子文件夹.我需要得到所有的文件.文件夹中的EIA扩展.

我知道我可以为此使用Get-Item、Get-ChildItem,但这些cmdlet获取数据的速度太慢.此外,此脚本必须每小时运行一次,因此不能占用超长时间.

我试图使用[System.IO.File]::GetFiles($path),但这给出了一个错误

 Method invocation failed because [System.IO.File] does not contain a method named 'GetFile'

我也试过了

$pathEia = "\\Sidney2\MfgLib\AidLibTest\*\*.EIA"
 [System.IO.File]::GetFiles($pathEia)

这还会引发一个错误:

 Exception calling "GetFiles" with "1" argument(s): "The filename, directory name, or volume label
     | syntax is incorrect. : '\\Sidney2\MfgLib\AidLibTest\*\*.EIA'"

我正在使用

推荐答案

请try 以下操作:

$path = '\\Sidney2\MfgLib\AidLibTest'
$allFilesOfInterest =
  foreach ($dir in [System.IO.Directory]::GetDirectories($path)) {
    [System.IO.Directory]::GetFiles($dir, '*.EIA')
  }
  • 请注意两步方法——首先获取子目录,然后判断它们的文件——因为我不知道有什么标准.NET API,允许您跨层次 struct 的各个级别(例如\\Sidney2\MfgLib\AidLibTest\*\*.EIA')处理通配符.

  • 如果您需要对文件和目录的枚举进行更多控制,GetDirectoriesGetFiles方法提供了接受System.IO.EnumerationOptions实例的重载,但不幸的是,在PowerShell(Core)7+/.仅限净(核心):

    • Windows PowerShell/.NET Framework只提供System.IO.SearchOption个实例的重载,但唯一可以控制枚举是否为recursive.
  • 以上将匹配文件中的full paths个存储在$allFilesOfInterest中;如果只需要文件names,请运行Split-Path -Leaf $allFilesOfInterest

.net相关问答推荐

StackExchange.Redis和NRedisStack包有什么不同?

PowerShell中窗体定时器和系统定时器的统一处理

.NET MAUI ListView - ObservableCollection - 在异步方法期间不更新

在`MAUI`应用中使用Android`MediaPlayer`的`prepare`方法只在发布模式下和在物理设备上崩溃

将日期时间转换为日期格式 dd/mm/yyyy

如何找到windows服务exe路径

异步总是 WaitingForActivation

使用 IIS Express 托管网站(临时)

SubscribeOn 和 ObserveOn 有什么区别

如何在 WPF 中创建/制作圆角按钮?

创建多个线程并等待所有线程完成

System.String.Copy 在 .NET 中有什么用?

如何制作通用类型转换函数

多个添加的实体可能具有相同的主键

是否有 Linq 方法可以将单个项目添加到 IEnumerable

C# - 你如何停止计时器?

判断 .NET 中的目录和文件写入权限

错误 NU1605 检测到包降级

合并两个(或更多)PDF

您可以将 Microsoft Entity Framework 与 Oracle 一起使用吗?