行ごとに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出力のパスが切り捨てられるのはなぜですか。
出力を 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
で十分です。
私にとっては、export-csv
単に:
GCI 'E:\' -Recurse | Select FullName | Export-CSV Files.csv
二重引用符なし:
Add-Content -Path Files.txt -Value (GCI 'E:\' -Recurse).FullName
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:\>
戻り値が文字列の場合、パイプで幅のある文字列に渡すことができます。
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出力の表示
これは古い投稿であることは知っていますが、探していた答えの前に見つかりました。だから私は私の発見を共有すると思いました。
必要に応じて結果を簡単に操作し続けることができるため、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
_を取り除くことをお勧めします。
このメソッドでは、切り捨てられていない値で作業していることを常に保証します。これにより、通常、ファイルまたは画面に移動する前に必要な情報を整理できます。