Szukam pliku we wszystkich folderach.
Copyforbuild.bat
jest dostępny w wielu miejscach i chciałbym szukać rekurencyjnie.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
Jak mogę to zrobić w PowerShell?
powershell
powershell-2.0
Samselvaprabu
źródło
źródło
cd V:\MyFolder
następniels -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
) na końcu nazwy pliku. ****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2:$Folder = "C:\Program Files"
Line3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
Używam tego, aby znaleźć pliki, a następnie PowerShell wyświetla całą ścieżkę wyników:
Zawsze możesz użyć symbolu wieloznacznego
*
wFolderName
i / lubFileName.fileExtension
. Na przykład:Powyższy przykład przeszuka dowolny folder na
C:\
dysku, zaczynając od słowaFolder
. Więc jeśli masz folder o nazwieFolderFoo
iFolderBar
PowerShell wyświetli wyniki z obu tych folderów.To samo dotyczy nazwy i rozszerzenia pliku. Jeśli chcesz wyszukać plik z określonym rozszerzeniem, ale nie znasz nazwy pliku, możesz użyć:
Lub odwrotnie:
źródło
Podczas wyszukiwania folderów, w których może wystąpić błąd związany z bezpieczeństwem (np.
C:\Users
), Użyj następującego polecenia:źródło
Będzie również działać
źródło
Oto metoda, którą w końcu wymyśliłem po zmaganiu:
Aby wyczyścić dane wyjściowe (tylko ścieżka), użyj:
Aby uzyskać tylko pierwszy wynik, użyj:
Teraz najważniejsze rzeczy:
Aby wyszukiwać tylko pliki / katalogi, nie używaj
-File
lub-Directory
(patrz poniżej dlaczego). Zamiast tego użyj tego dla plików:i usuń
-eq $false
katalogi. Czy nie zostawić z tyłu wieloznaczny podobnegobin/*
.Dlaczego nie skorzystać z wbudowanych przełączników? Są okropne i losowo usuwają funkcje. Na przykład, aby użyć
-Include
z plikiem, musisz zakończyć ścieżkę znakiem wieloznacznym. Jednak powoduje to wyłączenie-Recurse
przełącznika bez mówienia:Można by pomyśleć, że dałoby to wszystkie
*.lib
s we wszystkich podkatalogach, ale przeszukuje tylko najwyższy poziombin
.Aby wyszukać katalogi, możesz użyć
-Directory
, ale musisz usunąć końcowy znak zastępczy. Z jakiegokolwiek powodu nie spowoduje to dezaktywacji-Recurse
. Z tych powodów polecam nie używać wbudowanych flag.Możesz znacznie skrócić to polecenie:
staje się
Get-ChildItem
jest aliasowany dogci
-Path
jest ustawiona domyślnie na pozycję 0, więc możesz po prostu utworzyć ścieżkę pierwszego argumentu-Recurse
jest aliasowany do-s
-Include
nie ma stenografiiźródło
Spróbuj tego:
źródło
| Where-Object { !$_PSIsContainer }
do wykluczenia folderówFiltruj za pomocą symboli wieloznacznych:
Filtrowanie przy użyciu wyrażenia regularnego:
źródło
'\ACopyForBuild\.(bat|cmd)\Z'
?Aby dodać do odpowiedzi @ user3303020 i wyświetlić wyniki wyszukiwania w pliku, możesz uruchomić
W ten sposób łatwiej będzie wyszukać poprawny plik.
źródło