Udostępnij za pośrednictwem


about_Wildcards

Krótki opis

Opisuje sposób używania symboli wieloznacznych w programie PowerShell.

Długi opis

Symbole wieloznaczne reprezentują jeden lub wiele znaków. Można ich używać do tworzenia wzorców wyrazów w poleceniach. Wyrażenia wieloznaczne są używane z operatorem -like lub z dowolnym parametrem, który akceptuje symbole wieloznaczne.

Aby na przykład dopasować wszystkie pliki w katalogu C:\Techdocs z rozszerzeniem nazwy pliku .ppt, wpisz:

Get-ChildItem C:\Techdocs\*.ppt

W tym przypadku gwiazdka (*) symbol wieloznaczny reprezentuje wszelkie znaki, które pojawiają się przed rozszerzeniem nazwy pliku .ppt.

Wyrażenia wieloznaczne są prostsze niż wyrażenia regularne. Aby uzyskać więcej informacji, zobacz about_Regular_Expressions.

Program PowerShell obsługuje następujące symbole wieloznaczne:

  • * — dopasuj zero lub więcej znaków
    • a* pasuje do aA, agi Apple
    • a* nie jest zgodna z banana
  • ? — w przypadku ciągów dopasuj jeden znak w tej pozycji
    • ?n pasuje do an, ini on
    • ?n nie jest zgodna z ran
  • ? — w przypadku plików i katalogów dopasuj zero lub jeden znak w tej pozycji
    • ?.txt pasuje do a.txt i b.txt
    • ?.txt nie jest zgodna z ab.txt
  • [ ] — dopasuj zakres znaków
    • [a-l]ook pasuje do book, cooki look
    • [a-l]ook nie jest zgodna z took
  • [ ] — dopasuj określone znaki
    • [bc]ook pasuje do book i cook
    • [bc]ook nie jest zgodna z hook
  • `* — dopasuj dowolny znak jako literał (a nie symbol wieloznaczny)
    • 12`*4 pasuje do 12*4
    • 12`*4 nie jest zgodna z 1234

W tym samym wzorcu wyrazu można uwzględnić wiele symboli wieloznacznych. Aby na przykład znaleźć pliki tekstowe z nazwami rozpoczynającymi się literami przez l, wpisz:

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

Mogą wystąpić przypadki, w których chcesz dopasować znak literału, a nie traktować go jako symbol wieloznaczny. W takich przypadkach można użyć znaku backtick (`) w celu ucieczki symbolu wieloznacznego, tak aby był porównywany przy użyciu wartości znaku literału. Na przykład '*hello`?*' pasuje do ciągów zawierających ciągi "hello?".

Wiele poleceń cmdlet akceptuje symbole wieloznaczne w wartościach parametrów. W temacie Pomoc dla każdego polecenia cmdlet opisano, które parametry akceptują symbole wieloznaczne. W przypadku parametrów, które akceptują symbole wieloznaczne, ich użycie jest bez uwzględniania wielkości liter.

Można użyć symboli wieloznacznych w poleceniach i blokach skryptów, takich jak tworzenie wzorca wyrazu reprezentującego wartości właściwości. Na przykład następujące polecenie pobiera usługi, w których wartość właściwości ServiceType zawiera Interactive.

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

W poniższym przykładzie instrukcja if zawiera warunek, który używa symboli wieloznacznych do znajdowania wartości właściwości. Jeśli opis punktu przywracania opis zawiera programu PowerShell, polecenie dodaje wartość właściwości Creation Time punktu przywracania do pliku dziennika.

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

Ucieczka symboli wieloznacznych w nazwach plików i katalogów

Nuta

Dopasowywanie symboli wieloznacznych dla elementów systemu plików działa inaczej niż w przypadku ciągów. Aby uzyskać więcej informacji, zobacz sekcję Uwagi metody DirectoryInfo.GetFiles(String, EnumerationOptions).

Podczas próby uzyskania dostępu do pliku lub katalogu zawierającego symbole wieloznaczne nazwa należy użyć znaków wieloznacznych. Rozważ następujące pliki:

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

Znaki nawiasu kwadratowego ([]) są symbolami wieloznacznymi, dlatego podczas próby pobrania pliku przy użyciu jednego z poleceń cmdlet elementu, takich jak Get-Item.

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

Jednak ten przykład nie powiódł się, ponieważ wartość nazwy pliku jest powiązana z parametrem Path , który obsługuje symbole wieloznaczne. W tym przypadku `[ wzorzec jest rozpoznawany jako zwykły [, który parametr Path interpretuje jako symbol wieloznaczny. Istnieją trzy sposoby rozwiązania tego problemu:

  • Uniknie znaków 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
    
  • Umieść nazwę pliku w pojedynczych cudzysłowach, aby backticks nie był rozszerzany przed powiązaniem z parametrem 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
    
  • Używanie 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
    

Zobacz także