Get-ChildItem | Baum gibt mir einen seltsam formatierten Baum

3029
aPerfectMisterMan

Die folgende Eingabe:

PS STG:\> Get-ChildItem | tree 

Gibt mir

Folder PATH listing for volume Data Volume serial number is 6576-C540 D:. ÃÄÄÄAPK ÃÄÄÄAssets ³ ÃÄÄÄAnimations ³ ³ ÃÄÄÄCharacters ³ ³ ³ ÀÄÄÄinhabitant ³ ³ ÃÄÄÄEnvironment ³ ³ ÀÄÄÄProps ³ ÃÄÄÄMaterials ³ ³ ÃÄÄÄCharacters ³ ³ ³ ÀÄÄÄinhabitant ³ ³ ÃÄÄÄEnvironment ³ ³ ÃÄÄÄParticles ³ ³ ³ ÀÄÄÄasteroidParticle ³ ³ ÀÄÄÄProps ³ ÃÄÄÄMeshes ³ ³ ÃÄÄÄCharacters ³ ³ ³ ÀÄÄÄinhabitant ³ ³ ÃÄÄÄEnvironment ³ ³ ÀÄÄÄProps 

...usw.

Als ich etwas erwartet hatte, das eher formatiert war:

├───APK ├───Assets └───Animations | └───Characters | | └───inhabitant | ├───Environment | └───Props └───Materials | └───Characters | | └───inhabitant | ├───Environment | └───Particles | | └───asteroidParticle | └───Props └───Meshes └───Characters | └───inhabitant ├───Environment └───Props 

Was mache ich falsch?

Dies ist der Wert von $OutputEncoding:

IsSingleByte : True BodyName : iso-8859-1 EncodingName : Western European (Windows) HeaderName : Windows-1252 WebName : Windows-1252 WindowsCodePage : 1252 IsBrowserDisplay : True IsBrowserSave : True IsMailNewsDisplay : True IsMailNewsSave : True EncoderFallback : System.Text.InternalEncoderBestFitFallback DecoderFallback : System.Text.InternalDecoderBestFitFallback IsReadOnly : True CodePage : 1252` 
5
Geben Sie in Powershell $ OutputEncoding ein und fügen Sie die Ergebnisse ein Keltari vor 10 Jahren 0
Siehe Bearbeiten in Post. aPerfectMisterMan vor 10 Jahren 0
@MHA, bitte kopiere das Detail in deinen ursprünglichen Beitrag - [der Beitrag kann bearbeitet werden] (http://superuser.com/posts/745083/edit). Dave vor 10 Jahren 0
Es sieht definitiv aus wie ein Codierungsproblem. Mein Baum funktioniert und die Kodierung lautet us-ascii. IsSingleByte: True BodyName: us-ascii EncodingName: US-ASCII-HeaderName: us-ascii WebName: us-ascii WindowsCodePage: 1252 IsBrowserDisplay: False .DecoderReplacementFallback IsReadOnly: True CodePage: 20127 Keltari vor 10 Jahren 0
Ich versuche einen Weg zu finden, um zur Codepage zu wechseln ... nicht viel Glück, aber ich bin mir sicher, dass dies das Problem ist Keltari vor 10 Jahren 0
@ Keltari - Sie können die Ausgabecodierung mit $ OutputEncoding = [System.Text.Encoding] :: GetEncoding ()`, but I am not able to repro OP's issue by setting the code page to `1252` Rynant vor 10 Jahren 0
@MHA Hilft die Verwendung des Befehls "ascii" für den Baum? `gci | Baum / A` Rynant vor 10 Jahren 1
Es gibt auch `chcp`, um die Codepage der Konsole abzurufen und festzulegen, aber ich konnte keine Änderung in der Anzeige sehen, indem ich sie änderte. http://technet.microsoft.com/de-de/library/bb490874.aspx Rynant vor 10 Jahren 0
Tree ist kein Powershell-Befehl, den ich kenne, und akzeptiert keine Pipe-Eingaben. "Baum" allein sollte Ihnen den gewünschten Baum geben. Eris vor 9 Jahren 0
@Eris Tree ist in PowerShell-Community-Erweiterungen verfügbar. Das OP hat jedoch nicht explizit erwähnt, ob sie dies verwenden oder ob PowerShell auf den Tree-Befehl von CMD zurückgreift. Iszi vor 9 Jahren 0
@MHA - Bitte geben Sie die Ausgabe von "Get-Command tree" an. Iszi vor 9 Jahren 0
Seit ich diese Fragen gestellt habe, bin ich auf eine andere Maschine umgezogen. Wenn ich "Baum" starte, funktioniert es wie beabsichtigt. Danke für deinen Beitrag. Wenn Sie es als Antwort formulieren, werde ich es akzeptieren. aPerfectMisterMan vor 9 Jahren 0

3 Antworten auf die Frage

0
John Oxley

Versuchen Sie es mit dem Kommando Show-Tree .

09:17 $ Show-Tree C:\Chocolatey\ -Depth 1 C:\Chocolatey\ |--bin \--lib 
0
JamieSee

Abhängig von der Version von PowerShell und dem Vorhandensein oder Nichtvorhandensein von Community-Erweiterungen können Sie am Ende tatsächlich C: \ Windows \ System32 \ tree.com aufrufen. Das Kauderwelsch ist darauf zurückzuführen, dass PowerShell nicht die richtige Codierung verwendet, um die erweiterten Zeichen anzuzeigen, die von tree.com standardmäßig verwendet werden. Sie können chcp.com verwenden, um die aktuelle Codepage-Einstellung des Befehlsprozessors anzuzeigen. Die übliche Standardeinstellung ist die Codepage 437. PowerShell verwendet standardmäßig die Codepage 1252. Es gibt verschiedene Optionen, um damit umzugehen, die gut funktionieren und sowohl wirkungslos als auch einfach sind.

  1. Verwenden Sie einfach Baum '/ A'.
  2. Konvertieren Sie die Ausgabe von tree in Byte und laden Sie sie mit der richtigen Codepage mit folgendem Code:

tree | %{ [System.Text.Encoding]::GetEncoding('IBM437').GetString($OutputEncoding.GetBytes($_)) }

-1
Zeth Palmgren

Führen Sie den Befehl in Powershell oder Powershell ISE aus?

Es besteht ein Unterschied.

Das bekomme ich in Powershell ISE:

PS C:\powershell> Get-ChildItem | tree Folder PATH listing Volume serial number is XXXX-XXXX C:. ÃÄÄÄFolder 1 ³ ÃÄÄÄSubfolder 1 ³ ÃÄÄÄSubfolder 2 ³ ÃÄÄÄSubfolder 3 ³ ÀÄÄÄSubfolder 4 ÃÄÄÄFolder 2 ³ ÃÄÄÄSubfolder 1 ³ ÃÄÄÄSubfolder 2 ³ ÃÄÄÄSubfolder 3 ³ ÀÄÄÄSubfolder 4 ÃÄÄÄFolder 3 ³ ÃÄÄÄSubfolder 1 ³ ÃÄÄÄSubfolder 2 ³ ÃÄÄÄSubfolder 3 ³ ÀÄÄÄSubfolder 4 ÀÄÄÄFolder 4 ÃÄÄÄSubfolder 1 ÃÄÄÄSubfolder 2 ÃÄÄÄSubfolder 3 ÀÄÄÄSubfolder 4  PS C:\powershell>  

Das bekomme ich in Powershell:

PS C:\powershell> Get-childitem | tree Folder PATH listing Volume serial number is XXXX-XXXX C:. +---Folder 1 ¦ +---Subfolder 1 ¦ +---Subfolder 2 ¦ +---Subfolder 3 ¦ +---Subfolder 4 +---Folder 2 ¦ +---Subfolder 1 ¦ +---Subfolder 2 ¦ +---Subfolder 3 ¦ +---Subfolder 4 +---Folder 3 ¦ +---Subfolder 1 ¦ +---Subfolder 2 ¦ +---Subfolder 3 ¦ +---Subfolder 4 +---Folder 4 +---Subfolder 1 +---Subfolder 2 +---Subfolder 3 +---Subfolder 4  PS C:\powershell> 
Interessanter Punkt hier, aber ich muss sagen, meine Erfahrung unterscheidet sich - die Baumausgabe ist die gleiche, unabhängig von der Verwendung von Konsole oder ISE. Haben Sie die Community-Erweiterungen installiert, oder verwenden Sie CMDs Baum? Iszi vor 9 Jahren 0