Sdílet prostřednictvím


about_Wildcards

Krátký popis

Popisuje, jak používat zástupné znaky v PowerShellu.

Dlouhý popis

Zástupné znaky představují jeden nebo více znaků. Můžete je použít k vytváření vzorů slov v příkazech. Výrazy se zástupným znakem se používají s operátorem -like nebo s libovolným parametrem, který přijímá zástupné cardy.

Pokud chcete například shodovat všechny soubory v C:\Techdocs adresáři s příponou .ppt názvu souboru, zadejte:

Get-ChildItem C:\Techdocs\*.ppt

V tomto případě zástupný znak hvězdička (*) představuje všechny znaky, které se zobrazí před příponou .ppt názvu souboru.

Výrazy se zástupnými znaky jsou jednodušší než regulární výrazy. Další informace najdete v tématu about_Regular_Expressions.

PowerShell podporuje následující zástupné znaky:

  • * - Shoda s nulovými nebo více znaky
    • a* shody aA, aga Apple
    • a* neodpovídá banana
  • ? - U řetězců odpovídá jednomu znaku v dané pozici.
    • ?n shody an, ina on
    • ?n neodpovídá ran
  • ? - U souborů a adresářů odpovídá nule nebo jednomu znaku v dané pozici.
    • ?.txt shody a.txt a b.txt
    • ?.txt neodpovídá ab.txt
  • [ ] - Shoda s rozsahem znaků
    • [a-l]ook shody book, cooka look
    • [a-l]ook neodpovídá took
  • [ ] - Shoda s konkrétními znaky
    • [bc]ook shody book a cook
    • [bc]ook neodpovídá hook
  • `* – Porovná libovolný znak jako literál (nikoli zástupný znak)
    • 12`*4 zápasy 12*4
    • 12`*4 neodpovídá 1234

Do stejného vzoru slova můžete zahrnout více zástupných znaků. Pokud chcete například najít textové soubory s názvy, které začínají písmeny a ažl, zadejte:

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

Můžou existovat případy, kdy chcete, aby se literálový znak shodovaly místo toho, aby byl považován za zástupný znak. V takových případech můžete pomocí znaku zpětného znaku (`) utéct zástupný znak, aby byl porovnán pomocí hodnoty literálového znaku. '*hello`?*' Například odpovídá řetězcům obsahujícím text "hello?".

Mnoho rutin přijímá zástupné znaky v hodnotách parametrů. Téma nápovědy pro každou rutinu popisuje, které parametry přijímají zástupné znaky. U parametrů, které přijímají zástupné znaky, jejich použití nerozlišuje malá a velká písmena.

Zástupné znaky můžete použít v příkazech a blocích skriptu, například vytvořit vzor slova, který představuje hodnoty vlastností. Například následující příkaz získá služby, ve kterých hodnota vlastnosti ServiceType zahrnuje Interactive.

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

V následujícím příkladu if příkaz obsahuje podmínku, která k vyhledání hodnot vlastností používá zástupné znaky. Pokud popis bodu obnovení obsahuje PowerShell, příkaz přidá hodnotu vlastnosti CreationTime bodu obnovení do souboru protokolu.

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

Zapouzdření zástupných znaků v názvech souborů a adresářů

Poznámka:

Porovnávání se zástupnými znaky pro položky systému souborů funguje jinak než u řetězců. Další informace naleznete v Poznámky Oddíl DirectoryInfo.GetFiles(String, EnumerationOptions) metoda.

Při pokusu o přístup k souboru nebo adresáři, který obsahuje zástupné znaky název, je nutné utéct zástupné znaky. Zvažte následující soubory:

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

Znaky hranatých závorek ([]) jsou zástupné znaky, takže při pokusu o získání souboru pomocí některé z rutin Item, jako Get-Itemje například .

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

Tento příklad však selhal, protože hodnota názvu souboru je vázána na parametr Path , který podporuje zástupné znaky. V tomto případě se `[ vzor přeloží na prostý [, který parametr Path interpretuje jako zástupný znak. Existují tři způsoby, jak tento problém vyřešit:

  • Uchytáte znaky zpětného zápisu.

    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
    
  • Před vazbou na parametr Path vložte název souboru do jednoduchých uvozovek, aby se backticks nezvětšovaly.

    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
    
  • Použití parametru 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
    

Viz také