Jak przeszukiwać ciąg znaków w wielu plikach i zwracać nazwy plików w Powershell?
Zacząłem uczyć się powershell kilka dni temu, i nie mogłem znaleźć nic w google, które robi to, czego potrzebuję, więc proszę o moje pytanie.
Zostałem poproszony o zamianę niektórych ciągów tekstowych na wiele plików. Niekoniecznie znam rozszerzenie możliwych plików docelowych i nie znam ich lokalizacji. Do tej pory udało mi się rekurencyjnie przeglądać katalog (get-ChildItem -recurse
) i znaleźć szukany ciąg znaków z get-content I select-string:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
Problem polega na tym, że widzę występowanie tekstu, którego szukam, ale nie wiem, jak powiedzieć psowi, aby zwrócił ścieżkę i nazwę dla każdego pasującego pliku.
Jak mogę uzyskać nazwę i lokalizację plików zawierających wyrażenie, którego szukam?
9 answers
To powinno podać lokalizację plików zawierających Twój wzorzec:
Get-ChildItem -recurse | Select-String -pattern "dummy" | group path | select name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 15:08:33
Istnieje wiele dokładnych odpowiedzi tutaj, ale tutaj jest najbardziej zwięzły kod dla kilku różnych odmian. Dla każdej odmiany górna linia pokazuje pełną składnię, a dolna-składnię skróconą.
Pozycja (2) jest bardziej zwięzłą formą odpowiedzi od Jona z i manojldsa, podczas gdy pozycja (1) jest równoważna odpowiedziom od vikas368 i buygrusha.
-
Lista fileinfo obiektów dla wszystkich plików zawierających wzorzec:
Get-ChildItem -Recurse filespec | Where-Object { Select-String pattern $_ -Quiet } ls -r filespec | ? { sls pattern $_ -q }
-
Lista nazwy plików dla wszystkich plików zawierających wzorzec:
Get-ChildItem -Recurse filespec | Select-String pattern | Select-Object -Unique Path ls -r filespec | sls pattern | select -u Path
-
Lista FileInfo obiektów dla wszystkich plików nie zawierających wzorzec:
Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) } ls -r filespec | ? { !(sls pattern $_ -q) }
-
Lista nazw plików dla wszystkich plików nie zawierających wzorzec:
(Get-ChildItem -Recurse filespec | Where-Object { !(Select-String pattern $_ -Quiet) }).FullName (ls -r filespec | ? { !(sls pattern $_ -q) }).FullName
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 12:38:40
Pokaż zawartość swojego
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
Do fl *
Zobaczysz, że ścieżka jest już zwracana jako właściwość obiektów.
Jeśli chcesz tylko ścieżkę, użyj select path
lub select -unique path
, Aby usunąć duplikaty:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy" | select -unique path
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 16:20:51
Get-ChildItem -r | ? {$_.psiscontainer -eq $false} | ? {gc $_.pspath |select-string -pattern "dummy"}
To da ci pełne informacje o wszystkich plikach
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-22 13:13:38
Wyświetli ścieżkę, nazwę pliku i znalezioną linię zawartości pasującą do wzorca.
Get-ChildItem -Path d:\applications\*config -recurse | Select-String -Pattern "dummy"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 18:41:09
Aby zachować pełne szczegóły pliku w tablicy wynikowej, możesz użyć niewielkiej modyfikacji odpowiedzi wysłanej przez vikas368 (która nie działała dobrze z autouzupełnianiem ISE):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String -Pattern "dummy" }
Lub w skrócie:
ls -r | ?{ $_ | Select-String -Pattern "dummy" }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-21 10:12:12
Tak bym to zrobił, nie potrzebujesz get-content:
ls -r | Select-String dummy | select line,path
Lub
ls -r | Select-String dummy | fl
Aby zobaczyć, jakie są różne właściwości...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 17:34:36
Wyświetli listę pełnej ścieżki do każdego pliku zawierającego szukany ciąg:
foreach ($file in Get-ChildItem | Select-String -pattern "dummy" | Select-Object -Unique path) {$file.path}
Zauważ, że nie wyświetla nagłówka nad wynikami i nie wyświetla wierszy tekstu zawierających szukany ciąg. Wszystko, co mówi, to gdzie można znaleźć pliki, które zawierają ciąg znaków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-07 18:48:17
Jeśli przeszukasz jeden katalog, możesz to zrobić:
select-string -Path "c:\temp\*.*" -Pattern "result" -List | select Path
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-05 11:00:13