Назад | Перейти на главную страницу

Могу ли я передать многострочную строку в svn в PowerShell?

У меня в скрипте есть следующая строка:

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?


В качестве побочного вопроса: каков канонический способ получить путь для создания временного файла?

[io.path] :: GetTempFileName () вернет временное имя файла (включая путь)

Я не так хорошо знаком с svn, так что извините, если следующее не имеет отношения ... но вы, безусловно, можете передавать многострочные строки в Powershell или вызываемую программу Powershell (при условии, что вызываемая программа поддерживает это).

Вот один из способов, который мне особенно нравится, из Совет недели Technet Windows Powershell.. (Powershell 'Here-Strings').

А вот еще один из ТАК-ответа, хотя я понятия не имею, будет ли это работать с запущенной программой ... просто это работает изначально в PowerShell.

Наконец, строки (во всех вариантах) также могут выходить за пределы одной строки:

'Foo
bar'

Если ни один из методов не работает, я бы сказал, что вы столкнулись с ограничением svn.

В Windows временную папку пользователя можно найти с помощью системной переменной TEMP или TMP.

[Batch]
echo %TEMP%
echo %TMP%

[Powershell]
echo $env.temp
echo $env.tmp