我正在搜索目录,查找只包含数字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查询运行每个,但我并不担心这一部分。
答案 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