2009-03-23 24 views
18

Tôi cần phải echo một loạt các phần tử của một mảng trong PowerShell, nhưng cung cấp các dấu phân tách khác nhau giữa các phần tử, vì vậy tôi đang sử dụng;Viết các tab vào một tệp bằng PowerShell

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

Tôi cần có thể thêm các tab và ký tự khoảng trắng, như bạn có thể thấy từ đoạn mã trên tôi đã làm điều này bằng cách thêm các tab và dấu cách vào giữa các dấu ngoặc kép. sẽ gây ra sự cố xuống dòng.

Cách chính xác để lặp lại các ký tự này với một tệp là gì? Tôi đọc ở đâu đó rằng "t" có thể được sử dụng, nhưng điều đó dường như không hoạt động?

+1

Thông thường nó sẽ là \ t phải không? –

+0

@jeffamaphone: Trong các ngôn ngữ sử dụng '\' để thoát khỏi các ký tự trong chuỗi, có. Không phải mọi ngôn ngữ đều hoạt động theo cách đó. – Joey

Trả lời

48

Bạn có thể sử dụng ký tự `t cho một tab trong chuỗi được trích dẫn kép. Bạn cũng có thể đơn giản hóa ở trên để:

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

Chuỗi 't escape là thứ tôi đang tìm kiếm. Lưu ý: đó là dấu nháy đơn được đảo ngược. – Zarepheth

+2

Dấu nháy đơn được đảo ngược? Nó là ASCII 96 (0x60). Nó có tên [* backtick *, * backquote *, và * grave accent *] (https://en.wikipedia.org/wiki/Grave_accent#Use_in_programming). –

26

Để tham gia các lĩnh vực được đề cử cùng với các tab:

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

Đó là một lớp lót đẹp. Chỉ cần làm cho tôi mỉm cười. –

+2

trong khi bạn đang ở đó: [string] :: join ("' t ", (0..3,15,17 |% {$ fields [$ _]})) – Wouter

+0

@Wouter, cảm ơn. Đã thay đổi '0,1,2,3' thành' 0,3'. –

Các vấn đề liên quan