![](/img/trans.png)
[英]How to filter a file by name file with different extension file using PowerShell?
[英]powershell filter to remove .pdf extension in the name of a file
我正在尝试使用Powershell将文件夹中的所有子元素都获取到我正在使用的代码中
Get-ChildItem -Recurse -path C:\clntfiles
这段代码给出类似的输出
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 4/29/2015 9:11 AM 6919044 HD 100616 Dec2014.pdf
-a--- 5/1/2015 11:42 AM 7091019 HD 101642 Jan2015.pdf
我不希望Mode lastWriteTime长度和没有.pdf扩展名的文件名
输出应该像
Dec2014
Jan2015
我不确定如何过滤。 请指教
这样的事情应该为您做。
$files = Get-ChildItem -Recurse -path C:\clntfiles
if ($files -ne $null)
{
foreach ($file in $files)
{
$file.BaseName
}
}
在我的文件夹中,它显示:
> 2014-03-28_exeresult_file
> 2014-03-30_exeresult_file
> 2014-03-31_exeresult_file
> 2014-04-02_exeresult_file
> 2014-04-03_exeresult_file
> 2014-04-04_exeresult_file
> 2014-04-06_exeresult_file
> 2014-04-08_exeresult_file
并且确实是.txt文件希望这会有所帮助!
我将从发布与Leptonator的答案类似的内容开始,但通过使用Select-Object
命令简化(别名Select
在代码中使用,因为它是习惯,而且我很懒)。
$files = Get-ChildItem -Recurse -path C:\clntfiles | Select -ExpandProperty BaseName
现在,您将获得不带扩展名的文件名。 但是,您实际上只要求提供一部分文件名,因为第一个文件名是“ HD 100616 Dec2014.pdf”,并且您指定实际上只希望返回“ Dec2014”。 我们可以用几种不同的方法来做到这一点,但是我最喜欢的是RegEx匹配(因为RegEx很棒,而且我认为LastIndexOf
/ SubString
组合太复杂了,恕我直言)。
因此,RegEx匹配"\\w+$"
将得到您想要的。 这样分解:
\\w
表示任何字母或数字
+
表示其中1个或多个
$
表示字符串/行的结尾
因此,该字符串的末尾是1个或多个字母数字字符。 我们将文件名数组通过管道ForEach-Object
到ForEach-Object
循环(出于习惯使用别名ForEach
),然后得到:
$Files | ForEach{ [RegEx]::Matches($_,"\w+$")}
现在,它输出一个[System.Text.RegularExpressions.Match]
对象,该对象比您想要的更多,但是它确实具有属性Value
,正是您所要的! 因此,对于该属性,我们再次使用Select -Expand
,输出正是您所要求的:
$files = Get-ChildItem -Recurse -path C:\clntfiles | Select -ExpandProperty BaseName
$files | ForEach{[regex]::Matches($_,"\w+$")} | Select -Expand Value
RegEx匹配确实非常方便,如果您了解它们,则可以将其简化如下:
gci C:\clntfiles -Rec | ?{$_.BaseName -match "(\w+)$"} | %{$Matches[1]}
该行及其上方的两行代码都应输出:
Dec2014
Jan2015
使用以下Get-ChildItem -Recurse -name -path C:\\clntfiles
。 这样只会得到文件名。
工作解决方案:
$names = Get-ChildItem -name
foreach($n in $names) {$n.Substring(0,$n.IndexOf("."))}
如果文件名的一部分是,则也可以使用LastIndexOf
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.