11

c:\temp\temp.txt内容のあるドキュメントがあるとします

line 1
line 2

そして私は次の関数を作成します

PS>function wrapit($text) {
@"
---Start---
$text
---End---
"@
}

その後、実行しますPS> wrapit((Get-Content c:\temp\temp.txt))

出力します

---Start---
line 1 line 2
---End---

改行を保持するにはどうすればよいですか?追加と補間は役に立ちません。

この関連する質問を見つけましたが、ここでは文字列配列を使用しています。改行文字を含む単一の文字列を使用しています(連結せずに関数内から直接文字列を出力し$text | gm、配列ではなく文字列で作業していることを確認すると、それらを確認できます)。私はそれを所定の位置に打ち込むために世界中のすべての文字列解析を行うことができますが、それは私が丸い穴に四角いペグを叩いているようです。私が欠けている概念は何ですか?

4

2 に答える 2

11

やりたいことをする簡単な方法は次のとおりです。

wrapit((Get-Content c:\temp\temp.txt | out-string))

ここで説明:ヒア-文字列@""は文字列""のように動作し、結果は変数展開でのPowerShellの動作によるものです。ちょうど試して:

$a = Get-Content c:\temp\temp.txt
"$a"

あなたのコメントについて:

$a | Get-Member
TypeName: System.String
...

だが

Get-Member -InputObject $a
TypeName: System.Object[]
...

最初の答えはOKです(文字列を受け取ります)。System.stringを毎回繰り返さないだけです。2番目では、パラメーターとして配列を受け取ります。

于 2012-11-13T04:37:35.360 に答える
7

の息子...

調査の結果Get-Content、文字列配列を返すようです。もちろん、これはデフォルトの文字で結合することにより、デフォルトで文字列に強制変換されます' '

本当に困惑しているのは、結果がget-member文字列に強制される理由です。なぜそれが起こるのか誰もが知っていますか?私が明示的にチェックするまで、問題は明白ではありませんでしたGet-Type

いずれにせよ、解決策は、[system.io.file]::ReadAllText('c:\temp\temp.txt')overを使用してファイルを読み取ることでしたGet-Content

于 2012-11-13T04:33:39.380 に答える