2012-02-16 7 views
2

私は$ string変数の内容をテキストファイルに入れているときに、それが見えるいくつかのジャンク文字を追加します。たとえば、私は文字列にユーティリティ名を書き、その文字列を次のようにファイルにコピーしています。powershellの文字列操作で迷惑メールが追加されますか?

$CodeCount+="ccount.exe" 

$CodeCount | Out-file "C:\CodeCount.bat" 

このバッチファイルを実行しているときに、前にいくつかのジャンク文字が表示されて失敗します。 enter image description here

でも私はtrim()を試しましたが、それでも同じ結果が出ました。

正面にジャンク文字を追加しないようにするにはどうすればよいですか?

+2

はASCII'を-encodingアウトファイル '試してみてください –

答えて

7

すると、デフォルトの形で、少なくとも、out-fileを使用しないでください。 set-contentを使用してください。あるいは、out-file -encoding asciiのようなコードを明示的にout-fileに設定してください。デフォルトでout-fileは、多くのアプリケーション(Hg、Gitのようなバージョン管理システムを含む)でプレーンテキストとして扱われず、あなたが言及する "面白い"文字を追加するutf16(実際にはucs-2)エンコーディングを使用します。

リダイレクト>はアウトファイルと同じで、同じ結果が得られることに注意してください。

2

Out-fileに使用される標準のエンコーディングがUnicodeであるため、ファイルの先頭にいくつかのBOM値が追加されます(16進エディタでファイルを開くときにこれらの値が表示されます)。これらのバイトは-encoding ASCIIを使用しないようにするには:

$CodeCount | Out-file -encoding ascii "C:\CodeCount.bat" 
2

デフォルトのエンコードOut-Fileは、リトルエンディアンUnicodeです。ただASCIIを使用するようcmd.exeはこのエンコーディングでうまく動作しません:

Out-File -Encoding ASCII

関連する問題