webdevqa.jp.net

-width 300を指定した場合でも、切り捨てられたPowerShell出力を修正する方法

行ごとに1つの完全修飾ディレクトリ/ファイルパスを使用して、外部ハードドライブ上のすべてのディレクトリとファイルのリストを取得しようとしています。私はWindows 10でPowerShellを使用してこれを実現しています。これは私が使用しているPowerShellコマンドです。

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt" -width 300

ただし、一部のパスが出力で切り捨てられています。実際、10,000行を超える行は切り捨てられています。これは、私のlisting.txt PowerShell出力ファイルの1行の例です。

E:\Sort\Tech Stuff\2006-2007 CompanyLtd\fsie01-Engineering-Users-User1\Reference\LCID & Language Group by Language\Configuring and Using International Features of Windows Windows 2000 - List of Locale I...

ファイルエクスプローラーでこのディレクトリを参照すると(E:\ Sort\Tech Stuff\2006-2007 CompanyLtd\fsie01-Engineering-Users-User1\Reference\LCID&Language Group by Language)、そこにあるファイルは「設定と使用Windows 2000の国際機能-ロケールIDと言語グループのリスト。このファイルのパスは、私が間違って数えていなければ、228文字の長さであり、許容範囲内である必要があります。

PowerShell出力のパスが切り捨てられるのはなぜですか。

8
osullic

出力を Format-Table コマンドレットにパイプします。次のように:

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Format-Table -AutoSize

または

(Get-ChildItem 'E:\' -Force -Recurse).FullName | Format-Table -AutoSize

-WidthコマンドレットのOut-Fileパラメータは、出力の各行の文字数を指定することに注意してください。追加の文字は、折り返されずに切り捨てられます。ただし、この場合は-Width 300で十分です。

7
JosefZ

私にとっては、export-csv

https://docs.Microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Export-Csv?view=powershell-3.

単に:

GCI 'E:\' -Recurse | Select FullName | Export-CSV Files.csv

二重引用符なし:

Add-Content -Path Files.txt -Value (GCI 'E:\' -Recurse).FullName
2
Falco Alexander

Andreaswbjとjosefzからの回答をまとめて、私がやろうとしていることを実行する必要があります。


PS:\> $FormatEnumerationLimit = -1   
PS:\> $Console = $Host.UI.RawUI 
PS:\> $Buffer = $Console.BufferSize  
PS:\> $Buffer.Width = '4096'
PS:\> $Console.BufferSize = $Buffer 
PS:\> $Var = [PsCustomObject]@{Stdout = $("*"*1024)} 
PS:\> $Var

Stdout
------
****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************


PS:\>






1
joshua larsen

戻り値が文字列の場合、パイプで幅のある文字列に渡すことができます。

Get-ChildItem 'E:\' -Force -Recurse | Select-Object FullName | Out-String -Width 300 | Out-File -Encoding utf8 "C:\Users\Me\Desktop\listing.txt"

値がコレクション/配列内にある場合、出力は$ FormatEnumerationLimitによって制御されます。値を-1に設定すると、無制限になります。

詳細はこちら 切り詰められたPowerShell出力の表示

これは古い投稿であることは知っていますが、探していた答えの前に見つかりました。だから私は私の発見を共有すると思いました。

0
AndreasWBJ

必要に応じて結果を簡単に操作し続けることができるため、ConvertTo-Csv(Export-Csvと同じですが、ファイルに送信しません)を使用します。

_gci 'C:\Program Files\'_

_gci 'C:\Program Files\' | Select Mode,LastWriteTime,Length,Name | ConvertTo-Csv_

これで文字列(オブジェクトではない!)があり、どのデータも切り捨てられていないことが保証されているため、他の文字列操作を引き続き使用できます。あなたがしたいこと:

_gci 'C:\Program Files\' | Select Name | ConvertTo-Csv | Select-String "Win"_

_(gci 'C:\Program Files\' | Select Name | ConvertTo-Csv) -Replace """", ""_

2つ目は、CSVエンコーディングによって追加された "文字を削除します。

メモ:

_<verb>-Csv_コマンドレットは、allプロパティタイプ(AliasProperty、NoteProperty、Property、ScriptPropertyなど)を出力します。あなたはそれを簡単にチェックすることができます:

_gci 'C:\Program Files\' | Get-Member *Property_

また、-No (-NoTypeInformation)スイッチを使用して、すべての出力の上部にある_#TYPE Selected.System.IO.DirectoryInfo_を取り除くことをお勧めします。

このメソッドでは、切り捨てられていない値で作業していることを常に保証します。これにより、通常、ファイルまたは画面に移動する前に必要な情報を整理できます。

0
roysubs