在powershell中对列表的每个元素运行一个函数

Geo*_*uer 3 powershell

我有一个充满文件对的目录.每对文件都有相同的名称,扩展名为mp3和cdg(卡拉OK文件!).我想使用powershell来获取没有扩展名的所有不同文件名的列表

我已经达到了:

dir -recurse -filter "*.mp3" | select-object Name | sort
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将每个名称传递给[System.IO.Path] :: GetFileNameWithoutExtension

我该怎么做?

Jar*_*Par 6

您正在寻找的是for-each(%)过滤器(不确定它是过滤器还是cmdlet,但它具有相同的使用语法).

请尝试以下方法

dir -recurse -filter "*.mp3" | 
  %{ $_.Name } |
  %{ [IO::Path]::GetFileNameWithoutExtension($_) } |
  sort
Run Code Online (Sandbox Code Playgroud)

编辑更新

我把答案从" select-object Name"改为" %{ $_.Name}".前者基本上从管道值中取出Name属性,并使用指定名称的单个属性创建一个新对象,其中包含原始对象上的值.后者将处理管道中的每个值,并传递执行$_.Name管道的结果.