回答:
使用するには、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
、FolderBar
PowerShellはこれらのフォルダーの両方からの結果を表示します。
ファイル名とファイル拡張子についても同様です。特定の拡張子を持つファイルを検索したいが、ファイルの名前がわからない場合は、次を使用できます。
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'
?