186

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

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

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

ただし、パス全体ではなく、ファイル名のみが返されます。

4

15 に答える 15

273

| select FullName上記の行の最後に追加します。後で実際に何かを行う必要がある場合は、次のように、それをforeachループにパイプする必要があります。

get-childitem "C:\windows\System32" -recurse | where {$_.extension -eq ".txt"} | % {
     Write-Host $_.FullName
}
于 2012-10-29T17:01:42.217 に答える
130

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

Get-ChildItem C:\WINDOWS\System32 -Filter *.txt -Recurse | % { $_.FullName }
于 2012-10-29T20:11:41.000 に答える
42

次のようにSelect-Objectを使用することもできます。

Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
于 2014-06-28T16:19:50.360 に答える
27

これは短いものです:

(Get-ChildItem C:\MYDIRECTORY -Recurse).fullname > filename.txt
于 2014-02-10T16:31:47.160 に答える
14

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

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

于 2016-04-06T08:30:47.113 に答える
7

これを試して:

Get-ChildItem C:\windows\System32 -Include *.txt -Recurse | select -ExpandProperty FullName
于 2015-08-10T11:35:24.297 に答える
7
Get-ChildItem -Recurse *.txt | Format-Table FullName

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

于 2016-03-23T19:05:49.010 に答える
7

PS5では本当に厄介なことです。$_がforeach内のフルパスにはなりません。これらは、FileInfoおよびDirectoryInfoオブジェクトの文字列バージョンです。何らかの理由で、パス内のワイルドカードで修正するか、Powershell6または7を使用します。途中でget-itemにパイプすることもできます。

Get-ChildItem -path C:\WINDOWS\System32\*.txt -Recurse | foreach { "$_" }

Get-ChildItem -path C:\WINDOWS\System32 -Recurse | get-item | foreach { "$_" }

これは、.Net Core(Powershell 7)で解決された.Netの問題のようです 。FileInfo/ Directoryインスタンスの文字列化の動作がv6.0.2から変更されました#7132

于 2018-11-28T22:28:24.743 に答える
5

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

$Thisfile=(get-childitem -path 10* -include '*.JPG' -recurse).fullname

get-member -membertype properties信じられないほど便利なコマンドを使用して見つけました。.<thing>ここにあるように、それが提供するほとんどのオプションには、が追加されfullnameます。同じコマンドを貼り付けることができます。

  | get-member -membertype properties 

コマンドの最後に、コマンドで実行できることとそれらにアクセスする方法に関する詳細情報を取得します。

get-childitem -path 10* -include '*.JPG' -recurse | get-member -membertype properties
于 2016-01-28T10:27:36.880 に答える
2
gci "C:\WINDOWS\System32" -r -include .txt | select fullname
于 2015-09-11T08:30:42.010 に答える
2

この行コマンドを使用して、「C:\ Temp」内の「.xlm」ファイルを検索し、結果はファイル「result.txt」内のフルネームパスを出力しました。

(Get-ChildItem "C:\Temp" -Recurse | where {$_.extension -eq ".xml"} ).fullname > result.txt 

私のテストでは、この構文は私にとって美しく機能します。

于 2019-12-06T12:12:32.453 に答える
2

なぜ誰もforeachループをまだ使用していないのですか?ここでの長所は、変数に簡単に名前を付けることができることです。

# Note that I'm pretty explicit here. This would work as well as the line after:
# Get-ChildItem -Recurse C:\windows\System32\*.txt
$fileList = Get-ChildItem -Recurse -Path C:\windows\System32 -Include *.txt
foreach ($textfile in $fileList) {
    # This includes the filename ;)
    $filePath = $textfile.fullname
    # You can replace the next line with whatever you want to.
    Write-Output $filePath
}
于 2019-12-08T17:20:06.900 に答える
1

[代替構文]

一部の人々にとって、方向性パイプオペレーターは彼らの好みではありませんが、むしろ連鎖を好みます。roslyn Issue Trackerで共有されているこのトピックに関するいくつかの興味深い意見を参照してください:dotnet / roslyn#5445

ケースとコンテキストに基づいて、このアプローチの1つは暗黙的(または間接的)と見なすことができます。たとえば、この場合、列挙可能なrequiresに対してパイプを使用するには、特別なトークン$_(別名PowerShell's "THIS" token)が不快に見える場合があります。

そのような仲間のために、これはドットチェーンでそれを行うためのより簡潔で簡単な方法です:

(gci . -re -fi *.txt).FullName

(<rant> PowerShellのコマンド引数パーサーは部分的なパラメーター名を受け入れることに注意してください。したがって、;、、、、、、およびに加えて、-recursive受け入れられます-recursivが、残念ながら..は、単一の文字で意味のある唯一の正しい選択です( POSIXy UNIXyの規則に従ってください)!</ rant>)-recursi-recurs-recur-recu-rec-re-r-

于 2015-11-22T10:56:06.777 に答える
1

以下のスクリプトを使用して、すべてのフォルダーパスを抽出しています。

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...
于 2018-11-29T08:00:49.213 に答える
0

パラメータと形式としてディレクトリパス文字列を含む実行可能ファイルがあるという問題がありました。このような:

"C:\ temp \ executeable.exe" "C:\ storage \ filename" "C:\ storage \ dump" -jpg

このコマンドは、さまざまなフォルダーにあるテラバイト単位の.jpgファイルで実行する必要がありました。

$files = Get-ChildItem  -Path C:\storage\*.jpg -Recurse -Force | Select-Object -ExpandProperty FullName

for ($i=0; $i -lt $files.Count; $i++) {
    [string]$outfile = $files[$i]
    
    Start-Process -NoNewWindow -FilePath "C:\temp\executable.exe" -ArgumentList $outfile, "C:\storage\dump", "-dcm"
   

}
于 2021-07-07T12:07:53.267 に答える