2016-06-22 24 views
1

我正在搜索一個目錄,查找僅包含數字0的文件。Powershell從文件列表中匹配語句

我已經使用的代碼:

$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查詢運行每個,但我並不擔心這部分。

+0

要澄清,您只需要文件名,沒有路徑?例如itm1234.txt:1:0 –

+0

您正在查找的文件是否由單個「0」字符組成?其他文件呢? –

回答

2

Select-String cmdlet返回一個Microsoft.PowerShell.Commands.MatchInfo對象的列表。如果調用Get-Member cmdlet和參數-MemberType Properties你會得到所有公開的屬性的列表:

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