2016-02-08 170 views
15

出力するテキストの後にPowerShellのOut-Fileコマンドが改行を追加しないようにするにはどうすればよいですか?PowerShell Out-Fileコマンドの末尾改行を防止する

たとえば、次のコマンドを実行すると、 "TestTest"ではなく "TestTest \ r \ n"という内容のファイルが生成されます。

"TestTest" | Out-File -encoding ascii test.txt -NoNewline 

をしかし、それ以前のバージョンでは、単にそのコマンドレットを使用してすることはできません。

"TestTest" | Out-File -encoding ascii test.txt 

答えて

22

のPowerShell 5.0以上では、あなたが使用します。

これを試してみてください:

[System.IO.File]::WriteAllText($FilePath,"TestTest",[System.Text.Encoding]::ASCII) 
2

briantist's helpful answer-NoNewline再補完へ:

を以下だけでOut-Fileにない適用されますが、同様にSet-Content/Add-Contentだけでなく、前述のとおり、-NoNewlineにはPSv5 +が必要です。

-NoNewlineすなわち、出力に複数オブジェクトと、それが抑制されるだけ末尾改行(改行)ではなく、任意改行ことを意味します。

言い換えれば、入力オブジェクトの文字列表現は、セパレータ(ターミネータ)を使用せずに直接連結されます。

したがって、次のコマンドは、同じファイルの内容(末尾の改行せずTestTest)をもたらす:

# Single input string 
"TestTest" | Out-File -encoding ascii test.txt -NoNewline 

# Equivalent command: 2-element array of strings that are directly concatenated. 
"Test", "Test" | Out-File -encoding ascii test.txt -NoNewline 

ため間ではなく、また、後の出力のみ場所改行にはオブジェクトの場合は、を改行で明示的にオブジェクトに結合する必要があります。

"Test", "Test" -join "`r`n" | Out-File -encoding ascii test.txt -NoNewline 

UNIXスタイルのLF専用改行を作成するには、"`r`n"の代わりに"`n"を使用します。

警告

上記-joinソリューションは、暗黙のうちに、彼らはまだなっていない場合、入力は、文字列にオブジェクトを変換し、しばしば異なるが得られ、各オブジェクトに.NET .ToString()メソッドを呼び出すことによってそれを行いますOut-FileはPowerShellのデフォルト出力フォーマッタを使用しているため、Out-Fileが直接作成するものよりも表現が簡単です。たとえば、(Get-Date).ToString()の出力を比較し、ちょうどGet-Dateの出力を比較します。

あなたの入力は.ToString()表現満足のいくものである、上記の解決策は動作しますが、その後同じ文字列化を適用しSet-Contentレットを使用することが一般的に好ましいことに注意して文字列のみ及び/または非文字列を含む場合暗黙のうちに。
Out-FileSet-Contentの相違点の詳細は​​、this answerを参照してください。

入力に文字列を使用してコンソールに出力する場合は、実際には単純な解決策はありません。Out-Stringを使用してデフォルトのフォーマッタでオブジェクト単位の文字列表現を作成できますが、 の不足-NoNewline(v5.1の; this GitHub issueはそれを導入することを示唆しています)は常に後続の改行を生成します。

+1

これは重要なポイントです。 – briantist

関連する問題