freshman2017
Goto Top

Die Zeichenfolge hat kein Abschlusszeichen - Batch mit mehrzeiligem Powershellbefehl

Hallo,

leider finde ich hier den Fehler nicht, in der Doku finde ich auch nichts. Wer kann mir auf die Sprünge helfen?

set quelle=%userprofile%\Desktop\Testmuster\muster-2.csv
if exist "%quelle%"  goto :prog1  
if not exist "%quelle%" goto :EOF  
:prog1
powershell -Executionpolicy ByPass -Command "$quelle = '$env:USERPROFILE\Desktop\Testmuster\muster-2.csv';$ziel = '$env:USERPROFILE\Desktop\Testmuster\muster.txt';$csvdata = Import-csv $quelle -Delimiter ';' -Encoding Default;($csvdata | %%{"$($_.'Vorname');$($_.'Name');$($_.'Anschrift');$($_.'neue Plz');$($_.'neuer Ort');"}) -join "" | set-content $ziel  

Schönen Abend, face-smile

Content-Key: 341618

Url: https://administrator.de/contentid/341618

Printed on: April 18, 2024 at 00:04 o'clock

Mitglied: 133417
133417 Jun 25, 2017 updated at 17:34:24 (UTC)
Goto Top
Habe ich gerade erst in folgendem Thread beantwortet face-wink
Werte aus CSV in TXT - Powershell
Tipp: Doppelte Anführungszeichen innerhalb von doppelten sind mit Backslash zu "escapen".

Außerdem fehlt dir zusätzlich das "Abschließende" davon face-wink

Gruß
Member: freshman2017
freshman2017 Jun 25, 2017 updated at 19:47:18 (UTC)
Goto Top
Den Thread habe ich gerade erst gesehen, dabei habe ich mich in meinem Fall gefragt, ob die beim -join auch escaped werden müssen?

powershell -Executionpolicy ByPass -Command "$quelle = '$env:USERPROFILE\Desktop\Testmuster\muster-2.csv';$ziel = '$env:USERPROFILE\Desktop\Testmuster\muster.txt';$csvdata = Import-csv $quelle -Delimiter ';' -Encoding Default;($csvdata | %%{\"$($_.'Vorname');$($_.'Name');$($_.'Anschrift');$($_.'neue Plz');$($_.'neuer Ort');\"}) -join "" | set-content $ziel"  
Mitglied: 133417
133417 Jun 25, 2017 updated at 20:07:46 (UTC)
Goto Top
Selbstverständlich, wenn man mal logisch mitdenkt, und das gilt für die meisten Skript/Programmiersprachen. Denn sonst würde Batch denken das der PS Command hinter dem -join aufhört, soll er ja aber nicht!
Member: freshman2017
freshman2017 Jun 25, 2017 at 20:33:09 (UTC)
Goto Top
Super, ich danke dir☺

powershell -Executionpolicy ByPass -Command "$quelle = '$env:USERPROFILE\Desktop\Testmuster\muster-2.csv';$ziel = '$env:USERPROFILE\Desktop\Testmuster\muster.txt';$csvdata = Import-csv $quelle -Delimiter ';' -Encoding Default;($csvdata | %%{\"$($_.'Vorname');$($_.'Name');$($_.'Anschrift');$($_.'neue Plz');$($_.'neuer Ort');\"}) -join \"\" | set-content $ziel"  
Mitglied: 133417
133417 Jun 25, 2017 updated at 20:52:27 (UTC)
Goto Top
Tipp: In Powershell darfst du ja Hochkommas als Stringbegrenzer nutzen, wenns geht, und du keine Variablen im String auflösen musst, also stattdessen diese nutzen:
-join ''
Member: freshman2017
freshman2017 Jun 26, 2017 at 12:46:04 (UTC)
Goto Top
Irgendwas fehlt da noch, aber eigentlich müsste es doch jetzt klappen face-sad

powershell -Executionpolicy ByPass -Command "$quelle = '$env:USERPROFILE\Desktop\Testmuster\muster-2.csv';$ziel = '$env:USERPROFILE\Desktop\Testmuster\muster.txt';$csvdata = Import-csv $quelle -Delimiter ';' -Encoding Default;($csvdata | %%{\"$($_.'Vorname');$($_.'Name');$($_.'Anschrift');$($_.'neue Plz');$($_.'neuer Ort');\"}) -join '' | set-content $ziel"  
Mitglied: 133417
Solution 133417 Jun 26, 2017 updated at 15:49:25 (UTC)
Goto Top
Nö, das tut es nicht, les meinen letzten Post noch mal ganz pingelig in Bezug auf die Variablenauflösung innerhalb von einfachen Hochkommatas! Dann weißt du wieso das so nicht funktionieren kann...
powershell -Executionpolicy ByPass -Command "((Import-CSV \"$env:USERPROFILE\Desktop\Testmuster\muster-2.csv\" -Delimiter ';' -Encoding Default) | %%{\"$($_.'Vorname');$($_.'Name');$($_.'Anschrift');$($_.'neue Plz');$($_.'neuer Ort')\"}) -join '' | set-content \"$env:USERPROFILE\Desktop\Testmuster\muster.txt\""  

Schade, da schreibt man das extra alles hin, aber keiner liest es face-sad, einfach nur arm...
Member: freshman2017
freshman2017 Jun 26, 2017 at 15:53:00 (UTC)
Goto Top
Ich war gerade dabei zu antworten face-sad hatte es gerade...
Member: pps4535
pps4535 Jun 27, 2017 updated at 18:49:26 (UTC)
Goto Top
Hallo, ich bin neu hier und habe gerade diesen Eintrag von Dir, BibersBaum gefunden,vorher hatte ich mich durch die Doku gekämpft und dann das hier gelesen - die Rettung.

Bei meiner Ausgangs CSV kann das sein, dass bsp. 'neuer Ort' oder 'neues Land' nur manchmal vorhanden ist - warum auch immer.

Jetzt würde ich gerne, damit auch ich den Code nutzen kann, gerne folgendes versuchen. Wenn in der Spalte 'neues Land' eines vorhanden ist, nehme das, sonst (wenn keines vorhanden) schreibe 'Deutschland' als Standardwert.
Member: pps4535
pps4535 Jun 27, 2017 at 18:49:59 (UTC)
Goto Top
Ist das mit Powershell und diesem Code überhaupt möglich?
Member: freshman2017
freshman2017 Jun 28, 2017 at 05:15:21 (UTC)
Goto Top
Hast du es mal mit folgender Seite versucht:

https://ss64.com/ps/if.html