У меня в скрипте есть следующая строка:
svn propset svn:externals $newExternals $path
Теперь впервые $newExternals
появляется многострочная строка (имеется несколько svn:external
свойств) и svn
она лает на меня таким образом, что, по-видимому, показывает, что она не может справиться с аргументом.
Могу ли я передать многострочную строку в программу, которую я вызываю в PowerShell?Или проблема в том, что svn
я не могу это разобрать? Или мне нужны кавычки? (Не помогло, но я мог накосячить в чем-то другом.)
Если это не сработает, то svn
также примем файл для чтения данных:
svn propset svn:externals -F externals.txt $path
Однако, похоже, это не срабатывает, поскольку svn
ожидает externals.txt
файл ASCII (или UTF-8, я не уверен, но не думаю, что это имеет значение), в то время как PowerShell по умолчанию пишет UTF-16. Так какой же канонический способ передать что-либо в файл ASCII?
В качестве дополнительного вопроса: каков канонический способ получения пути для создания временного файла?
решение1
[io.path]::GetTempFileName() вернет имя временного файла (включая путь)
решение2
Я не очень хорошо знаком с svn
, поэтому извините, если следующее не относится к делу... но вы, безусловно, можете передавать многострочные строки в Powershell или в вызываемую программу Powershell (при условии, что вызываемая программа поддерживает это).
Вот один из способов, который мне особенно нравится, из Technet Windows Powershell Tip of the Week. (Powershell 'Here-Strings').
А вот еще один, из ответа SO, хотя я понятия не имею, будет ли это работать с вызванной программой... просто это изначально работает в PowerShell.
Наконец, строки (во всех разновидностях) могут также выходить за пределы одной строки:
'Foo
bar'
Если ни один из методов не сработал, я бы сказал, что вы столкнулись с ограничением svn
.
решение3
В Windows временную папку пользователя можно найти с помощью системной переменной TEMP или TMP.
[Batch]
echo %TEMP%
echo %TMP%
[Powershell]
echo $env.temp
echo $env.tmp