2010-11-23 74 views
2

デフォルトでは、セット内容Set-Content C:\test.txt "test","test1"を使用すると、2つの提供された文字列は改行で区切られますが、ファイルの最後に改行もあります。powershell get-content改行を無視

Get-Contentの使用時に、この改行や改行をスペースで無視するにはどうすればよいですか?

答えて

1

あなたはこのように、空行を削除することができます。

Set-Content C:\test.txt "test",'',"test1" 
Get-Content c:\test.txt | ? { $_ } 

しかし、それは同様に途中で文字列を削除します。
編集:実際に私がこの例を試したところ、Get-Contentは最後の空白行がSet-Contentで追加されたことを無視していることに気付きました。

あなたの問題はSet-Contentだと思います。あなたはWriteAllTextと回避策を使用している場合は、それが正常に動作します:

[io.file]::WriteAllText('c:\test.txt', ("test",'',"test1" -join "`n")) 

あなたは2番目のパラメータとして文字列を渡します。だから私は最初に-join経由で文字列に参加し、それをメソッドに渡したのです。

注:文字列の連結が効率的でないため、大きなファイルにはお勧めできません。

+0

[' WriteAllLines'](http://msdn.microsoft.com/en-us/library/system.io.file.writealllines.aspx)メソッドが動作します'[IO.File] :: WriteAllLines( 'c:\ test.txt'、(" test "、" '、 "Test1"))を使用して配列を '--join'する必要がなくなります。 ' –

0

デフォルトの動作では、文字列の配列でコンテンツを設定して1行に1つずつ取得できるため、Set-Contentは改行を追加します。とにかくGet-Contentは最後の "改行"を無視します(空白がない場合)。セットコンテンツの周り 作業:

([byte[]][char[]] "test"), ([byte]13), ([byte]10) ,([byte[]][char[]] "test1") | 
    Set-Content c:\test.txt -Encoding Byte 

または[io.file]多くのsimplierを使用:: WriteAllText

あなたは、正確な状況(またはコード)を指定することができますか?あなたがコンテンツを取得するときに、最後の行を無視したい場合は

例えばそれは次のようになります。

$content = Get-Content c:\test.txt 
$length = ($content | measure).Count 
$content = $content | Select-Object -first ($length - 1) 

あなただけ行う場合:「テスト:

"test","test1" | Set-Content C:\test.txt 
$content = Get-Content C:\test.txt 

$コンテンツ変数は、2つの項目が含まれています"、" test1 "

0
Get-Content C:\test.txt | Where-Object {$_ -match '\S'} 
関連する問題