来自文件列表的Powershell匹配语句

时间:2016-06-22 00:33:56

标签: powershell

我正在搜索目录,查找只包含数字0的文件。

我使用过代码:

$fileList = Select-String -Path c:\cnt\*.txt -pattern "0"

它输出一个列表,例如:

C:\cnt\itm123.txt:1:0
c:\cnt\itm1234.txt:1:0
c:\cnt\itm123456.txt:1:0

我只需要提取itm###,但文件名中的总数可以是3-6。

使用上面的示例我需要一个看起来像这样的列表:

itm123
itm1234
itm123456

一旦我得到它,我将通过SQL查询运行每个,但我并不担心这一部分。

1 个答案:

答案 0 :(得分:2)

Select-String cmdlet返回Microsoft.PowerShell.Commands.MatchInfo个对象的列表。如果使用参数-MemberType Properties调用Get-Member cmdlet,您将获得所有公开属性的列表:

Name       MemberType Definition                                                       
----       ---------- ----------                                                       
Context    Property   Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename   Property   string Filename {get;}                                           
IgnoreCase Property   bool IgnoreCase {get;set;}                                       
Line       Property   string Line {get;set;}                                           
LineNumber Property   int LineNumber {get;set;}                                        
Matches    Property   System.Text.RegularExpressions.Match[] Matches {get;set;}        
Path       Property   string Path {get;set;}                                           
Pattern    Property   string Pattern {get;set;}    

在这种情况下,您正在寻找Filename属性。所以如果你执行

Select-String -Path c:\cnt\*.txt -pattern "0" | select FileName

您将获得所有文件名:

itm123.txt
itm1234.txt
itm123456.txt

现在您要做的就是删除可以使用.NET方法GetFileNameWithoutExtension完成的文件扩展名:

Select-String -Path c:\cnt\*.txt -pattern "0" | 
    ForEach-Object { [io.path]::GetFileNameWithoutExtension($_.FileName)} 

<强>输出

itm123
itm1234
itm123456