スクリプトに次の行があります:
svn propset svn:externals $newExternals $path
ここで初めて、$newExternals
複数行の文字列 (複数のsvn:external
プロパティがあります)svn
が表示され、引数を処理できないことを示すような警告が表示されます。
PowerShell で呼び出すプログラムに複数行の文字列を渡すことはできませんか?svn
それとも、それを解析できないことが問題なのでしょうか? それとも引用符が必要ですか? (役に立ちませんでしたが、何か他のことを間違えた可能性があります。)
これが機能しない場合は、svn
次のファイルも受け入れてそこから内容を読み取ることもできます。
svn propset svn:externals -F externals.txt $path
ただし、これは失敗するようです。なぜなら、 はASCII ファイル (または UTF-8、よくわかりませんが、ここでは関係ないと思います) をsvn
想定しているexternals.txt
のに対し、PowerShell はデフォルトで UTF-16 を書き込むからです。では、何かを ASCII ファイルにパイプする標準的な方法は何でしょうか?
補足として質問ですが、一時ファイルを作成するためのパスを取得する標準的な方法は何ですか?
答え1
[io.path]::GetTempFileName() は一時ファイル名(パスを含む)を返します。
答え2
私は にあまり詳しくないのでsvn
、以下の内容が関係ない場合はご容赦ください...ただし、複数行の文字列を Powershell または Powershell で呼び出されるプログラム (呼び出されるプログラムがそれをサポートしていると仮定) に渡すことは確かに可能です。
Technetの今週のWindows Powershellのヒントから、私が特に気に入っている方法を紹介します。. (Powershell 'Here-Strings`)。
そして、SOの回答からもう一つ。ただし、これが呼び出されたプログラムで機能するかどうかはわかりません... PowerShell でネイティブに機能することだけです。
最後に、文字列 (すべての種類) は 1 行を超えて拡張することもできます。
'Foo
bar'
どちらの方法もうまくいかない場合は、 の制限に遭遇したと言えますsvn
。
答え3
Windows では、システム変数 TEMP または TMP を使用してユーザーの一時フォルダーを見つけることができます。
[Batch]
echo %TEMP%
echo %TMP%
[Powershell]
echo $env.temp
echo $env.tmp