web-dev-qa-db-ja.com

PowerShellでファイルのフルパスを取得する

特定の種類に属するサブフォルダに存在するファイルを含むすべてのファイルを取得する必要があります。

私は Get-ChildItem を使って、このようなことをしています。

Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}

ただし、ファイル名だけが返され、パス全体は返されません。

115
Gagan

上の行の最後に| select FullNameを追加してください。その後実際にそれを使って何かをする必要があるなら、それをforeachループにパイプする必要があるかもしれません。

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}
176
Chris N

これはレイトフィルタリングを使用するよりもはるかに速く実行されるはずです。

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
82
Shay Levy

また、 Select-Object を使うこともできます。

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
19
imlokesh

これはもっと短いものです:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
14
JustAGuy

相対パスが必要な場合は、-Nameフラグを使用することができます。

Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name

8
Polymorphix
Get-ChildItem -Recurse *.txt | Format-Table FullName

それが私が使ったものです。ループ構文が含まれていないため、理解しやすいと思います。

4
Mandrake

これは私のために働き、名前のリストを作成します。

$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
2
L1ttl3J1m

これを試して:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
2
Mykhailo Basiuk

[代替構文]

一部の人々にとって、方向性のあるパイプ演算子は好みではありませんが、連鎖を好みます。 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>)

1
vulcan raven
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
1
Vuong Doan

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 { "$_" }
1
js2010

以下のスクリプトを使用して、すべてのフォルダパスを消去します。

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...
0
Ankit Gupta