Поделиться через


about_Wildcards

Краткое описание

Описывает использование подстановочных знаков в PowerShell.

Длинное описание

Подстановочные знаки представляют один или несколько символов. Их можно использовать для создания шаблонов слов в командах. Выражения подстановочных знаков используются с оператором -like или с любым параметром, принимающий подстановочные знаки.

Например, чтобы сопоставить все файлы в каталоге C:\Techdocs с расширением .ppt имени файла, введите:

Get-ChildItem C:\Techdocs\*.ppt

В этом случае подстановочный знак звездочки (*) представляет все символы, которые отображаются перед расширением .ppt имени файла.

Выражения подстановочных знаков проще регулярных выражений. Дополнительные сведения см. в about_Regular_Expressions.

PowerShell поддерживает следующие подстановочные знаки:

  • * — соответствие нулю или нескольким символам
    • a* совпадения aA, agи Apple
    • a* не соответствует banana
  • ? — Для строк следует соответствовать одному символу в этой позиции.
    • ?n совпадения an, inи on
    • ?n не соответствует ran
  • ? — для файлов и каталогов, совпадение с нулевым или одним символом в этой позиции
    • ?.txt совпадения a.txt и b.txt
    • ?.txt не соответствует ab.txt
  • [ ] — сопоставление диапазона символов
    • [a-l]ook совпадения book, cookи look
    • [a-l]ook не соответствует took
  • [ ] — сопоставление определенных символов
    • [bc]ook совпадения book и cook
    • [bc]ook не соответствует hook
  • `* — сопоставление любого символа как литерала (а не подстановочного знака)
    • 12`*4 , соответствующий 12*4
    • 12`*4 не соответствует 1234

Можно включить несколько подстановочных знаков в один и тот же шаблон слова. Например, чтобы найти текстовые файлы с именами, начинающимися с буквы через l, введите:

Get-ChildItem C:\Techdocs\[a-l]*.txt

В некоторых случаях требуется сопоставить литеральный символ, а не рассматривать его как подстановочный знак. В этих случаях можно использовать символ backtick (`) для экранирования подстановочного знака, чтобы он сравнивался с использованием значения литерального символа. Например, '*hello`?*' соответствует строкам, содержащим "hello?".

Многие командлеты принимают подстановочные знаки в значениях параметров. В разделе справки для каждого командлета описывается, какие параметры принимают подстановочные знаки. Для параметров, которые принимают подстановочные знаки, их использование не учитывает регистр.

Можно использовать подстановочные знаки в командах и блоках скриптов, например для создания шаблона слова, представляющего значения свойств. Например, следующая команда получает службы, в которых значение свойства ServiceType включает Interactive.

Get-Service | Where-Object {$_.ServiceType -like "*Interactive*"}

В следующем примере if инструкция содержит условие, которое использует подстановочные знаки для поиска значений свойств. Если описание точки восстановления включает PowerShell, команда добавляет значение свойства точки восстановления CreationTime в файл журнала.

$p = Get-ComputerRestorePoint
foreach ($point in $p) {
  if ($point.Description -like "*PowerShell*") {
    Add-Content -Path C:\TechDocs\RestoreLog.txt "$($point.CreationTime)"
  }
}

Экранирование подстановочных знаков в именах файлов и каталогов

Примечание.

Подстановочный знак для элементов файловой системы работает не так, как для строк. Дополнительные сведения см. в разделе "Примечания" метода DirectoryInfo.GetFiles(String, ListionOptions).

При попытке получить доступ к файлу или каталогу с подстановочными знаками имя, необходимо экранировать подстановочные знаки. Рассмотрим следующие файлы:

PS> Get-ChildItem

    Directory: D:\temp\test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           11/3/2025  3:39 PM             41 file[1].txt
-a---           11/3/2025  3:39 PM             41 file[2].txt
-a---           11/3/2025  3:39 PM             41 file[3].txt

Символы квадратной скобки ([]) являются подстановочными знаками, поэтому их необходимо экранировать при попытке получить файл с помощью одного из командлетов Item, таких как Get-Item.

PS> Get-Item file`[1`].txt

Однако в этом примере произошел сбой, так как значение имени файла привязано к параметру Path , который поддерживает подстановочные знаки. В этом случае `[ шаблон разрешается в обычный [режим, который параметр Path интерпретирует как подстановочный знак. Существует три способа устранить эту проблему:

  • Экранируйте символы backtick.

    PS> Get-Item -Path file``[1``].txt
    
        Directory: D:\temp\test
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---           11/3/2025  3:39 PM             41 file[1].txt
    
  • Поместите имя файла в одинарные кавычки, чтобы обратные типы не были развернуты перед привязкой к параметру Path .

    PS> Get-Item -Path 'file`[1`].txt'
    
        Directory: D:\temp\test
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---           11/3/2025  3:39 PM             41 file[1].txt
    
  • Использование параметра LiteralPath

    PS> Get-Item -LiteralPath file[1].txt
    
        Directory: D:\temp\test
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---           11/3/2025  3:39 PM             41 file[1].txt
    

См. также