【问题标题】:Filtering file names with Get-Content使用 Get-Content 过滤文件名
【发布时间】:2014-02-11 19:00:39
【问题描述】:

编辑:

这似乎有效。希望它可以帮助某人:

Get-ChildItem C:\Users\$env:username\Desktop\RD | 
Where-Object {$_.Name -match "^[^8]*141.txt"} | 
Foreach-Object {$_ 
                Get-Content -Path C:\Users\$env:username\Desktop\RD\$_ | 
                Out-File C:\Users\$env:username\Desktop\RD\141Master.txt
               }

我正在尝试为更明确的附加过程制定过滤文件名。所以我可以这样做:

Get-Content C:\erik\*.txt | Out-File C:\erik\whatever.txt

所有的文本文件都附加了。然后我可以这样做:

Get-Content C:\erik\*101.txt | Out-File C:\erik\whatever.txt

所有带有 101 的文件都追加。但是当我尝试这样的事情时:

Get-Content C:\erik\^[^8]*141.txt | Out-File C:\erik\whatever.txt

我明白了:

Get-Content : 指定路径的对象 C:\Users\edarling\Desktop\RD\^[^8]*141.txt 不存在,或已被 由 -Include 或 -Exclude 参数过滤。在行:1 字符:1 + 获取内容 C:\Users\edarling\Desktop\RD\^[^8]*141.txt |输出文件 C:\Users\edarl ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo : ObjectNotFound: (System.String[]:String[]) [Get-Content], 异常 + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetContentCommand

我一直在尝试通过管道将 Get-ChildItem 传递给 Get-Content,但无法完全弄清楚。有什么建议吗?

谢谢

【问题讨论】:

  • ^[^8]* 这是正则表达式?
  • 如果您自己找到了问题的解决方案,那么发布并接受您自己问题的答案是完全可以接受的。不过,请不要用答案更新您的问题,因为无法接受问题,这意味着没有迹象表明问题已实际解决。
  • 我试图回复和回答,但我没有代表点来做这件事。我收到一条消息说要编辑我的问题。感谢您的意见。
  • 您需要至少 50 名声望才能评论他人的问题或答案,但您可以从一开始就发布问题和答案。使用此页面底部的黑色按钮“发布您的答案”。

标签: powershell


【解决方案1】:

Get-Content 仅支持globbing,不支持regular expressions。对于前者,您只能执行以下操作:

  • 匹配所有以141.txt结尾的文件名:*141.txt
  • 匹配所有以foo 开头并以dt 结尾的文件名:foo*[dt]
  • 匹配由两个任意字符后跟扩展名.doc的所有文件名:??.doc

通配符不允许您形成一个表达式来匹配一个包含特定字符的名称。对于 Get-Content,您的表达式 ^[^8]*141.txt 表示“以插入符号开头的文件名,后跟另一个插入符号或字符 8,并以 141.txt 结尾”。

如果您需要通过正则表达式进行过滤,您必须使用-match 运算符:

Get-ChildItem 'C:\some\folder' | ? { $_.Name -match '^[^8]*141\.txt$' }

请注意,在正则表达式中,如果要匹配文字点 (\.),则需要对点进行转义。未转义的点匹配除换行符以外的任何字符。你还应该在两边都锚定你的表情。否则,正则表达式 ^[^8]*141.txt 不仅匹配 abc141.txt,还匹配 141_txt.doc

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多