Рекурсивные подстановочные знаки в PowerShell - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь удалить файлы в определенном наборе папок с помощью 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 голосов
/ 17 октября 2018

Вы можете указать полный путь каждого файла к регулярному выражению;это вернет только те файлы, которые соответствуют вашему формату, которые вы затем можете передать в Remove-Item:

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

Поскольку регулярные выражения считаются только для записи, пояснение немного:

  • обратные слэши считаются escape-символами внутри регулярного выражения и должны быть удвоены.
  • ([^\\]+) означает один или несколько символов кроме обратной косой черты
  • .* означает ноль или более символов
0 голосов
/ 16 октября 2018

Вы можете использовать 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 Piping | является ключевым.PowerShell нам нравится объединять команды.

...