2009-03-23 6 views
18

Ich muss eine Reihe von Elementen eines Arrays in PowerShell, aber verschiedene Trennzeichen zwischen den Elementen, so dass ich verwende;Schreiben von Tabs in eine Datei mit PowerShell

Add-Content -Path $tempInputDir\testoutput.log -value ($($fields[0]) + " "+ 
     $($fields[1]) + " " + $($fields[2]) + " " + $($fields[3]) + " "+ 
     $($fields[15]) + " " + $($fields[17])) 
} 

Ich muss in der Lage sein, Tabs und Leerzeichen hinzuzufügen, wie Sie aus dem Code sehen können oben ich dies gerade getan haben, indem physisch Tabs und Leerzeichen zwischen doppelten Anführungszeichen hinzufügen, aber ich bin sicher, dass dies verursacht Probleme auf der ganzen Linie.

Wie können diese Zeichen in einer Datei korrekt wiedergegeben werden? Ich habe irgendwo gelesen, dass "t" verwendet werden könnte, aber das scheint nicht zu funktionieren.

+1

Traditionell wäre es \ t richtig? –

+0

@jeffamaphone: In Sprachen, die '\' für das Entweichen von Zeichen in Zeichenfolgen verwenden, ja. Nicht alle Sprachen funktionieren so. – Joey

Antwort

48

Sie können `t für ein Tab-Zeichen in einer doppelten Zeichenfolge in Anführungszeichen verwenden.

"$($fields[0]) $($fields[1]) $($fields[2]) $($fields[3]) $($fields[15]) $($fields[17])" | Add-Content $tempInputDir\testoutput.log 
+2

Die 't Escape-Sequenz ist, was ich gesucht habe. Hinweis: Das ist das umgekehrte Apostroph. – Zarepheth

+2

Umgekehrter Apostroph? Es ist ASCII 96 (0x60). Es geht unter den Namen [* backtick *, * backquote * und * grave accent *] (https://en.wikipedia.org/wiki/Grave_accent#Use_in_programming). –

26

Um an die nominierten Felder zusammen mit Registerkarten:: Sie können auch die oben vereinfachen

[string]::join("`t", (0..3,15,17 | % {$fields[$_]})) 
+2

Das ist ein schöner Liner. Bringt mich zum Lächeln. –

+2

während du schon dabei bist: [string] :: join ("' t ", (0..3,15,17 |% {$ fields [$ _]})) – Wouter

+0

@Wouter, danke. "0,1,2,3" wurde in "0.3" geändert. –