1

Как открыть (скажем, с помощью notepad.exe) несколько файлов, заканчивающихся на _dc.txt, каждый из которых находится в нескольких подкаталогах C:\Data\Test?

Мой скрипт ниже застревает на -Recurse с ошибкой «Invoke-Item: не найден параметр, соответствующий имени параметра Recurse».

# recursively go into dc1 subfolders and open _dc.txt files
Clear-Host
$Directory = "C:\Data\Test*"

Invoke-Item -Path $Directory -Recurse -Include *_dc.txt

1 ответ1

0

-Recurse не является одним из "общих параметров" PowerShell. Поэтому он доступен не для всех командлетов. Если вам нужна функциональность -Recurse для использования с командлетом, который его не поддерживает, вам нужно будет передать выходные данные из командлета, который его поддерживает.

В этом случае, похоже, что сначала вам нужно будет передать выходные данные через фильтрующий командлет (например, Where-Object). Я попытался использовать -Include с Invoke-Item но не смог заставить его вести себя так, как вы этого хотите.

Пример:

Get-Childitem 'C:\Data\Test*' -Recurse | Where-Object {$_.Name -match "_dc.txt$"} | Invoke-Item

Расширено, с комментариями:

# Recursively search folders with names beginning 'C:\Data\Test' and return the objects found.
Get-ChildItem 'C:\Data\Test*' -Recurse |

# Filter objects to only those with names ending in `_dc.txt`.
Where-Object {$_.Name -match "_dc.txt$"} |

# Perform the default action (for .txt files, this is normally "Open with Notepad") on the objects.
Invoke-Item

Golfed:

ls 'C:\Data\Test*' -R|?{$_.Name -match "_dc.txt$"}|ii
  • ls - это встроенный псевдоним для Get-ChildItem
  • -Recurse может быть обрезано до -R поскольку это единственный параметр с именем, начинающимся с "R" для Get-ChildItem .
  • ? является встроенным псевдонимом для Where-Object .
  • ii является встроенным псевдонимом для Invoke-Item .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .