Ich habe die folgende Zeile in einem Skript:
svn propset svn:externals $newExternals $path
Jetzt kommt zum ersten Mal $newExternals
ein mehrzeiliger String (es gibt mehrere svn:external
Eigenschaften) und svn
er bellt mich auf eine Art an, die den Anschein erweckt, als könne er mit dem Argument nicht umgehen.
Kann ich einem Programm, das ich in PowerShell aufrufe, keine mehrzeilige Zeichenfolge übergeben?Oder liegt das daran, dass ich svn
das nicht analysieren kann? Oder brauche ich Anführungszeichen? (Hat nicht geholfen, aber vielleicht habe ich etwas anderes vermasselt.)
Wenn dies nicht funktioniert, svn
wird auch eine Datei akzeptiert, aus der das Material gelesen werden kann:
svn propset svn:externals -F externals.txt $path
Dies scheint jedoch fehlzuschlagen, da svn
erwartet wird externals.txt
, dass es sich um eine ASCII-Datei handelt (oder UTF-8, ich bin nicht sicher, aber ich glaube nicht, dass das hier relevant ist), während PowerShell standardmäßig UTF-16 schreibt. Was ist also die kanonische Methode, etwas in eine ASCII-Datei umzuleiten?
Eine Nebenfrage: Was ist die übliche Methode, um einen Pfad zum Erstellen einer temporären Datei zu erhalten?
Antwort1
[io.path]::GetTempFileName() gibt einen temporären Dateinamen (einschließlich Pfad) zurück.
Antwort2
Ich bin nicht so vertraut mit svn
, also entschuldigen Sie, wenn das Folgende nicht relevant ist … aber Sie können sicherlich mehrzeilige Zeichenfolgen an Powershell oder ein von Powershell aufgerufenes Programm übergeben (vorausgesetzt, das aufgerufene Programm unterstützt dies).
Hier ist eine Möglichkeit, die mir besonders gut gefällt, aus Technet Windows Powershell Tipp der Woche. (Powershell „Here-Strings“).
Und hier noch eine, aus einer SO-Antwort, obwohl ich keine Ahnung habe, ob dies mit einem aufgerufenen Programm funktioniert … nur, dass es nativ in PowerShell funktioniert.
Schließlich können Zeichenfolgen (in allen Varianten) auch über eine einzelne Zeile hinausgehen:
'Foo
bar'
Wenn keine der Techniken funktioniert, würde ich sagen, dass Sie an eine Einschränkung gestoßen sind svn
.
Antwort3
Unter Windows kann der temporäre Ordner des Benutzers mithilfe der Systemvariable TEMP oder TMP gefunden werden.
[Batch]
echo %TEMP%
echo %TMP%
[Powershell]
echo $env.temp
echo $env.tmp