特定の種類に属するサブフォルダに存在するファイルを含むすべてのファイルを取得する必要があります。
私は Get-ChildItem を使って、このようなことをしています。
Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
ただし、ファイル名だけが返され、パス全体は返されません。
上の行の最後に| select FullName
を追加してください。その後実際にそれを使って何かをする必要があるなら、それをforeachループにパイプする必要があるかもしれません。
get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
Write-Host $_.FullName
}
これはレイトフィルタリングを使用するよりもはるかに速く実行されるはずです。
Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
また、 Select-Object を使うこともできます。
Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
これはもっと短いものです:
(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
相対パスが必要な場合は、-Name
フラグを使用することができます。
Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name
Get-ChildItem -Recurse *.txt | Format-Table FullName
それが私が使ったものです。ループ構文が含まれていないため、理解しやすいと思います。
これは私のために働き、名前のリストを作成します。
$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname
私はget-member -membertype properties
という信じられないほど便利なコマンドを使って見つけました。 fullname
がここにあるように、それがあなたに与えるほとんどのオプションは.<thing>
で追加されます。同じコマンドを続けることができます。
| get-member -membertype properties
コマンドでできることや、それらにアクセスする方法についての詳細な情報を得るためのコマンドの最後に。
get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties
これを試して:
Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
[代替構文]
一部の人々にとって、方向性のあるパイプ演算子は好みではありませんが、連鎖を好みます。 roslyn issue trackerで共有されているこのトピックに関する興味深い意見をご覧ください: dotnet/roslyn#5445 。
ケースとコンテキストに基づいて、このアプローチの1つは暗黙的(または間接的)と見なすことができます。たとえば、この場合、enumerableに対してパイプを使用するには、特別なトークン$_
(別名PowerShell's "THIS" token
)が必要になる場合があります。
このようなフェラについては、ドットチェーンを使用して、より簡潔で簡単な方法があります。
(gci . -re -fi *.txt).FullName
(<rant> PowerShellのコマンド引数パーサーは部分的なパラメーター名を受け入れることに注意してください。したがって、-recursive
; -recursiv
、-recursi
、-recurs
、-recur
、-recu
、-rec
および-re
は受け入れられますが、残念ながら-r
..は単一で意味のある唯一の正しい選択ではありません-
文字(POSIXy UNIXの慣例に従っている場合)</ rant>)
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
PS 5では本当に厄介なことに、$ _はforeach内のフルパスにはなりません。これらはFileInfoおよびDirectoryInfoオブジェクトの文字列バージョンです。何らかの理由でパスのワイルドカードでそれを修正するか、PS 6を使用します。途中でget-itemにパイプすることもできます。
Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }
Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }
以下のスクリプトを使用して、すべてのフォルダパスを消去します。
Get-ChildItem -path "C:\" -Recurse -Directory -Force -ErrorAction SilentlyContinue | Select-Object FullName | Out-File "Folder_List.csv"
フルフォルダパスが来ていません。 113文字の後に来ている:
Example - C:\ProgramData\Microsoft\Windows\DeviceMetadataCache\dmrccache\en-US\ec4d5fdd-aa12-400f-83e2-7b0ea6023eb7\Windows...