我有一个充满文件对的目录。每对文件都有相同的名称,扩展名为mp3和cdg(卡拉OK文件!)。我想使用powershell来获取没有扩展名的所有不同文件名列表
我已经达到了:
dir -recurse -filter "*.mp3" | select-object Name | sort
但我无法弄清楚如何将每个Name传递给[System.IO.Path] :: GetFileNameWithoutExtension
我该怎么做?
答案 0 :(得分:6)
您正在寻找的是for-each(%)过滤器(不确定它是过滤器还是cmdlet,但它具有相同的使用语法)。
尝试以下
dir -recurse -filter "*.mp3" |
%{ $_.Name } |
%{ [IO::Path]::GetFileNameWithoutExtension($_) } |
sort
编辑更新
我将答案从“select-object Name
”更改为“%{ $_.Name}
”。前者基本上从管道值中取出Name属性,并创建一个新对象,该对象具有指定名称的单个属性,并且具有原始对象上的值。后者将处理管道中的每个值,并将执行$_.Name
的结果传递给管道。
答案 1 :(得分:4)
dir -recurse -filter“* .mp3”| select @ {name ='Name'; Expression = {[System.IO.Path] :: GetFileNameWithoutExtension($ _。Name)}} |排序
答案 2 :(得分:2)
如果您不喜欢像我一样输入%{$ _。foo},请尝试从PSCX获取Get-PropertyValue(别名:gpv)。
这里有更多适合你的人:[{3}}
答案 3 :(得分:2)
现在PowerShell v2是RTMd,您可以选择BaseName成员:
dir -recurse -filter * .mp3 |选择BaseName |排序