2016-04-01 14 views
0

Powershell kullanarak bir dizi SEKME sınırlandırılmış günlük dosyasını normalleştirmeyi deniyorum. İşte Powershell Out-File: Kodlamayı Ascii'ye zorla

akım script:

(Get-ChildItem *.csv) |%{ 
#Store the name of the file & date 
$Name = $_.basename 
$FileDate = $_.CreationTime 
#Prepends the following to each message: unique Identifer, Hostname, date 
(Get-Content $_.fullname) -replace "^","AR-LOG|$Name|$FileDate|"| 
#Replaces the TAB delimeter with a Pipe delimeter 
Foreach-Object {$_ -replace ' ','|'} | 
#Appends the resulting message in ascii 
Out-File -append -FilePath normalized.log -Encoding ascii 

giriş & çıkışının bir pasajı burada görülebilir:

http://pastebin.com/uaQadYUC

Nasıl ASCII olmak çıktı dosyasını zorlamak ve olamaz bir çeşit unicode mu?

*** Düzenleme: Daha giderme girdi dosyaları görünüşte Get-İçerik yerel işleyemeyen, aslında windows-1252 kodlu olduğunu ortaya koymaktadır

cevap

2

Sen sokak üzerinde kodlama bayrağını kullanmak mümkün olmalıdır (?) ... | Out-File -encoding ascii myfile.txt'da olduğu gibi dosya. Ve append kullanıyorsanız, tüm eklerin aynı kodlamayı kullandığından emin olun veya kullanılamayan bir dosyayla sonuçlanacaksınız.

+0

Evet, komut dosyasında (gördüğünüz) yaptığım şey budur, ancak çalışıyor gibi görünmüyor. –

0

ReadAllText yöntemiyle etrafta gezinebilir misiniz? Tüm dosyayı tek bir dizede saklar. Get-Content değerleri, dizi değerinin dosyanın satırı olduğu dizeler dizisi olarak depolar.

(Get-ChildItem *.csv) |%{ 
#Store the name of the file & date 
$Name = $_.basename 
$FileDate = $_.CreationTime 
#Prepends the following to each message: unique Identifer, Hostname, date 
([IO.File]::ReadAllText($_.fullname)) -replace "^","AR-LOG|$Name|$FileDate|" 
#Replaces the TAB delimeter with a Pipe delimeter 
-replace ' ','|' | 
#Appends the resulting message in ascii 
Out-File -append -FilePath normalized.log -Encoding ascii