Ich suche in allen Ordnern nach einer Datei.
Copyforbuild.bat
ist an vielen Stellen verfügbar, und ich möchte rekursiv suchen.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
Wie kann ich das in PowerShell machen?
powershell
powershell-2.0
Samselvaprabu
quelle
quelle
cd V:\MyFolder
gefolgt vonls -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
) am Ende des Dateinamens hinzufügte . ****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2:$Folder = "C:\Program Files"
LINE3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
Ich verwende dies, um Dateien zu finden und PowerShell den gesamten Pfad der Ergebnisse anzeigen zu lassen:
Sie können den Platzhalter immer
*
imFolderName
und / oder verwendenFileName.fileExtension
. Beispielsweise:Im obigen Beispiel wird jeder Ordner im
C:\
Laufwerk durchsucht, der mit dem Wort beginntFolder
. Wenn Sie also einen Ordner mit dem Namen habenFolderFoo
undFolderBar
PowerShell die Ergebnisse dieser beiden Ordner anzeigt.Gleiches gilt für den Dateinamen und die Dateierweiterung. Wenn Sie nach einer Datei mit einer bestimmten Erweiterung suchen möchten, aber den Namen der Datei nicht kennen, können Sie Folgendes verwenden:
Oder umgekehrt:
quelle
C:\Users
Verwenden Sie beim Durchsuchen von Ordnern, bei denen aufgrund der Sicherheit möglicherweise ein Fehler auftritt (z. B. ), den folgenden Befehl:quelle
Wird auch funktionieren
quelle
Hier ist die Methode, die ich mir nach dem Kämpfen endlich ausgedacht habe:
Verwenden Sie Folgendes, um die Ausgabe sauberer zu machen (nur Pfad):
Verwenden Sie Folgendes, um nur das erste Ergebnis zu erhalten:
Nun zu den wichtigen Dingen:
So suchen Sie nur für Dateien / Verzeichnisse Sie nicht verwenden ,
-File
oder-Directory
(siehe unten , warum). Verwenden Sie dies stattdessen für Dateien:und entfernen Sie die
-eq $false
for-Verzeichnisse. Hinterlassen Sie keine nachgestellten Platzhalter wiebin/*
.Warum nicht die eingebauten Schalter verwenden? Sie sind schrecklich und entfernen Merkmale zufällig. Um beispielsweise
-Include
eine Datei verwenden zu können, müssen Sie den Pfad mit einem Platzhalter beenden. Dies deaktiviert jedoch den-Recurse
Schalter, ohne Ihnen Folgendes zu sagen:Sie würden denken, das würde Ihnen alle
*.lib
s in allen Unterverzeichnissen geben, aber es wird nur die oberste Ebene von suchenbin
.Um nach Verzeichnissen zu suchen, können Sie verwenden
-Directory
, aber dann müssen Sie den nachfolgenden Platzhalter entfernen. Aus irgendeinem Grund wird dies nicht deaktiviert-Recurse
. Aus diesen Gründen empfehle ich, die eingebauten Flags nicht zu verwenden.Sie können diesen Befehl erheblich verkürzen:
wird
Get-ChildItem
ist aliasiert aufgci
-Path
ist standardmäßig Position 0, sodass Sie nur den ersten Argumentpfad erstellen können-Recurse
ist aliasiert auf-s
-Include
hat keine Abkürzungquelle
Versuche dies:
quelle
| Where-Object { !$_PSIsContainer }
, um Ordner auszuschließenFiltern mit Platzhaltern:
Filtern mit einem regulären Ausdruck:
quelle
'\ACopyForBuild\.(bat|cmd)\Z'
?Um die Antwort zu @ user3303020 hinzuzufügen und die Suchergebnisse in eine Datei auszugeben, können Sie sie ausführen
Auf diese Weise kann es einfacher sein, nach der richtigen Datei zu suchen.
quelle