PowerShell中的递归通配符

时间:2018-10-16 13:59:55

标签: powershell wildcard

我正在尝试使用PowerShell删除一组特定文件夹中的文件。我的代码当前如下所示:

$tempfolders = @(
    "C:\Windows\Temp\*"
    "C:\Documents and Settings\*\Local Settings\temp\*"
    "C:\Users\*\Appdata\Local\Temp\*"
    )

Remove-Item $tempfolders -Recurse -Force -ErrorAction SilentlyContinue

我要使用以下公式将新文件夹添加到该列表:

"C:\users\*\AppData\Local\Program\**\Subfolder"

其中**可能是多个未知长度的子文件夹。例如,它可以是settings\subsettings,也可以是folder\settings\subsettings。有办法吗?

2 个答案:

答案 0 :(得分:1)

您可以将每个文件的完整路径提供给正则表达式;这将仅返回与您的格式匹配的文件,然后您可以将其通过管道传递到Remove-Item:

ls "C:\Users" -Recurse -Hidden | Where-Object { $_.FullName -imatch '^C:\\users\\([^\\]+)\\AppData\\Local\\Program\\(.*)\\Subfolder' }

因为正则表达式被认为是只写的,所以需要一些解释:

  • 反斜杠被视为正则表达式中的转义字符,需要加倍。
  • ([^\\]+)表示除反斜杠外的任何一个或多个字符
  • .*表示零个或多个字符

答案 1 :(得分:0)

您可以使用Get-ChildItem -Directory -Recurse, 这将完全满足您的要求。将其从数组传递到Remove-Item

@("C:\Windows\Temp\*", "C:\Documents and Settings\*\Local Settings\temp\*", "C:\Users\*\Appdata\Local\Temp\*") | 
    Get-ChildItem -Directory -Recurse -Force -ErrorAction SilentlyContinue | 
    Remove-Item -Recurse -Force -ErrorAction SilentlyContinue

PowerShell管道|中的提示是关键。我们喜欢链接命令的PowerShell。