2017-01-16 2 views
0

Ich versuche, eine Zeichenfolge mit einem Zeilenumbruch in einer Datei zu ersetzen. Ich benutze die Kommandozeile dafür.Powershell-Befehl von cmd ersetzt Zeilenumbrüche nicht

Ich versuche, den gleichen Befehl in einer CMD-Shell und in PowerShell zu verwenden, aber ich kann nur scheinen, um es in letzterem zu arbeiten. Hier

ist der Befehl:

powershell -Command "(Get-Content client.properties -Raw).Replace('#test`r`n','test`r`n') | Set-Content client2.properties" 

Warum ist dies nicht in einem CMD-Shell arbeiten, und wie kann ich es funktioniert?

+0

Haben Sie laufen buchstäblich genau das gleiche Befehl in beiden Schalen oder cmd Äquivalent des Powershell-Befehl? – gms0ulman

+0

Können Sie Ihr Problem detaillierter spezifizieren? Sie schreiben, dass es in Powershell funktioniert und nicht in der Befehlszeile. Müssen Sie die normale WIN-Befehlszeile verwenden? – Moerwald

+0

Ich habe genau den gleichen Befehl ausgeführt. Ich habe eine Cmd-Shell geöffnet und ausgeführt, und ich habe auch versucht, sie in einer Fledermaus-Datei auszuführen. Wenn ich eine Powershell öffne und den Befehl ausführe, funktioniert es. Ich arbeite mit Win 10. – TinMan

Antwort

2

Die Escape-Sequenz `r`n funktioniert nicht in einfachen Anführungszeichen.

Verwenden Sie den -replace Operator statt und verwenden regex entkommt:

powershell -Command "(Get-Content client.properties -Raw)-replace('#test\r?\n','test'+$([Environment]::NewLine)) | Set-Content client2.properties" 
+0

Danke, der Zeilenumbruch wird nun korrekt erkannt. Aber das Hinzufügen des Zeilenumbrüchens funktioniert nicht. Es fügt einfach "test \ r? \ N" als String ein. Irgendeine Idee? – TinMan

+0

@Henna ja, meine schlechte, aktualisierte Antwort –

+0

Waren fast da. Jetzt bekomme ich eine RuntimeException "-ireplace" erlaubt nur 2 Elemente, nicht 3. Wenn ich nur "$ ([Environment] :: NewLine) verwende, funktioniert es, also ist irgendwie die Verkettung von Test und Zeilenumbruch falsch. – TinMan