回答:
使用するには、Get-ChildItemコマンドレットとコマンドレットを-Recurseスイッチ:
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force
cd V:\MyFolder続きls -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*ファイル名の末尾にアスタリスク記号()を追加して、部分的な文字列を実行するようにこの回答を調整しました。****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"LINE2:$Folder = "C:\Program Files"LINE3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
これを使用してファイルを検索し、PowerShellに結果のパス全体を表示させます。
dir -Path C:\FolderName -Filter FileName.fileExtension -Recurse | %{$_.FullName}
あなたは、常にワイルドカードを使用することができます*でFolderName、および/またはFileName.fileExtension。例えば:
dir -Path C:\Folder* -Filter File*.file* -Recurse | %{$_.FullName}
上記の例では、C:\ドライブ内の単語で始まるフォルダを検索しますFolder。という名前のフォルダーがある場合FolderFoo、FolderBarPowerShellはこれらのフォルダーの両方からの結果を表示します。
ファイル名とファイル拡張子についても同様です。特定の拡張子を持つファイルを検索したいが、ファイルの名前がわからない場合は、次を使用できます。
dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName}
またはその逆:
dir -Path C:\FolderName -Filter FileName.* -Recurse | %{$_.FullName}
Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat
も動作します
これが私が苦労して最後に思いついた方法です:
Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*
出力をクリーナー(パスのみ)にするには、以下を使用します。
(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname
最初の結果のみを取得するには、以下を使用します。
(Get-ChildItem -Recurse -Path path/with/wildc*rds/ -Include file.*).fullname | Select -First 1
ここで重要なものについて:
ファイルまたはディレクトリのみを検索するには、orを使用しないでください(以下の理由を参照してください)。代わりにこれをファイルに使用してください:-File-Directory
Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}
および-eq $falseディレクトリを削除します。のような末尾のワイルドカードを残さないでくださいbin/*。
組み込みのスイッチを使用しないのはなぜですか?彼らはひどいですし、ランダムに機能を削除します。たとえば-Include、ファイルで使用するには、パスの末尾をワイルドカードにする必要があります。ただし、これは通知-Recurseせずにスイッチを無効にします。
Get-ChildItem -File -Recurse -Path ./bin/* -Include *.lib
あなたはそれが*.libすべてのサブディレクトリのすべてのs を与えると思うでしょうが、それはトップレベルののみを検索しますbin。
ディレクトリを検索するには、を使用できます-Directoryが、末尾のワイルドカードを削除する必要があります。何らかの理由で、これは非アクティブ化しません-Recurse。これらの理由から、組み込みフラグを使用しないことをお勧めします。
このコマンドはかなり短くできます:
Get-ChildItem -Recurse -Path ./path*/ -Include name* | where {$_.PSIsContainer -eq $false}
なる
gci './path*/' -s -Include 'name*' | where {$_.PSIsContainer -eq $false}
Get-ChildItem にエイリアスされています gci-Path デフォルトは位置0なので、最初の引数パスを作成できます-Recurse にエイリアスされています -s-Include 略記がないこれを試して:
Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse | Where-Object { $_.Attributes -ne "Directory"}
| Where-Object { !$_PSIsContainer }してフォルダを除外することもできます
ワイルドカードを使用してフィルタリングする:
Get-ChildItem -Filter CopyForBuild* -Include *.bat,*.cmd -Exclude *.old.cmd,*.old.bat -Recurse
正規表現を使用したフィルタリング:
Get-ChildItem -Path "V:\Myfolder" -Recurse
| Where-Object { $_.Name -match '\ACopyForBuild\.[(bat)|(cmd)]\Z' }
'\ACopyForBuild\.(bat|cmd)\Z'?