Echo Befehl (Batch) in Verbindung mit Anführungszeichen klappt nicht
Hallo Forum !
Ich möchte bestimmte Zeilen aus der Quelle.txt auslesen und mit echo>> in die Ziel.txt schreiben.
Sobald in einer Zeile der Quelle.txt Anführungzeichen stehen, klappt der echo-Befehl aber nicht mehr.
Dies ist das Skript:
Und dies kommt dabei raus:
--- Inhalt der Quelldatei Quelle.txt ---
Diese Zeile soll "kopiert werden".
Diese Zeile soll "kopiert werden".
Diese Zeile soll "kopiert werden".
Diese Zeile soll auch kopiert werden.
--- Inhalt der Zieldatei Ziel.txt ---
Diese Zeile soll "kopiert
Diese Zeile soll "kopiert
Diese Zeile soll "kopiert
Diese Zeile soll auch kopiert werden.
Das "-Zeichen wird offensichtlich als Kommando interpretiert, ähnlich wie beim &-Zeichen, welches man ja wie im Skript escapen kann.
Hat jemand eine Erklärung dafür und weiß, wie sich das "Abhacken" der Zeile verhindern lässt?
Bin für jeden Ratschlag wie immer dankbar !
[Edit Biber] Codeformatierung [/Edit]
Ich möchte bestimmte Zeilen aus der Quelle.txt auslesen und mit echo>> in die Ziel.txt schreiben.
Sobald in einer Zeile der Quelle.txt Anführungzeichen stehen, klappt der echo-Befehl aber nicht mehr.
Dies ist das Skript:
@echo off
FOR /F "usebackq delims=" %%L in ("Quelle.txt") do call :ProcessLine "%%L"
exit
:ProcessLine
set Line=%~1
set Line=%Line:&=^&%
echo>> "Ziel.txt" %Line%
goto :eof
Und dies kommt dabei raus:
--- Inhalt der Quelldatei Quelle.txt ---
Diese Zeile soll "kopiert werden".
Diese Zeile soll "kopiert werden".
Diese Zeile soll "kopiert werden".
Diese Zeile soll auch kopiert werden.
--- Inhalt der Zieldatei Ziel.txt ---
Diese Zeile soll "kopiert
Diese Zeile soll "kopiert
Diese Zeile soll "kopiert
Diese Zeile soll auch kopiert werden.
Das "-Zeichen wird offensichtlich als Kommando interpretiert, ähnlich wie beim &-Zeichen, welches man ja wie im Skript escapen kann.
Hat jemand eine Erklärung dafür und weiß, wie sich das "Abhacken" der Zeile verhindern lässt?
Bin für jeden Ratschlag wie immer dankbar !
[Edit Biber] Codeformatierung [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 158923
Url: https://administrator.de/contentid/158923
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
7 Kommentare
Neuester Kommentar
moin alphabravo,
erstmal setz bitte Deinen Code in CodeTags so hier
<code>
Meine Codezeilen
</code>
zweitens in der Forschleife
wird niemalsnicht in der Sub :ProcessLine den Paramter %~1 so Komplett empfangen können
sowas nimmt man nur (vorzugsweise bastla) wenn Pfad- und Dateinamen verarbeitet werden. Da sind nämlich keine Anführungszeichen drinnen.
hier was zum testen in der CMD-Line
da kommst Du besser, Du setzt die komplette Zeile in eine Variable machst dann den call und in der Sub arbeitest Du mit der Variable direkt weiter.
wenn Du die Variable mit der Verzögerten Variablenauflösung darstellst dann klappst auch mit dem echo davor - und Du brauchst auch keine SonderZeichen extra zu maskieren.
drittens
wat dat denn? Schreibfehler? Das Meinst Du dann ehern so hier, wenn Du vorher setlocal enabledelayedexpansion benutzt.
und somit entfällt Deine MaskierungsZeile
ich bin ja so direkt kein Verfechter der call :Prozesslines "%%l" bei Textverarbeitung. Da arbeite ich den ganzen Schrutz meist in der Forschleife so ab.
was aber so keinen Sinn hätte - ausser die LeerZeilen zu löschen.
Gruß Phil
<code>
Meine Codezeilen
</code>
zweitens in der Forschleife
call :ProcessLine "%%L"
sowas nimmt man nur (vorzugsweise bastla) wenn Pfad- und Dateinamen verarbeitet werden. Da sind nämlich keine Anführungszeichen drinnen.
hier was zum testen in der CMD-Line
(echo @echo Parameter1 %~1.&echo @echo Parameter2 %~2.&echo @echo Parameter3 %~3.)>Test.cmd&test.cmd "Diese Zeile soll "kopiert werden"."
wenn Du die Variable mit der Verzögerten Variablenauflösung darstellst dann klappst auch mit dem echo davor - und Du brauchst auch keine SonderZeichen extra zu maskieren.
drittens
echo>> "Ziel.txt" %Line%
>"Ziel.txt" echo !Line!
Ich möchte bestimmte Zeilen aus der Quelle.txt auslesen und mit echo>> in die Ziel.txt schreiben.
und welche Zeilen sollen das sein?ich bin ja so direkt kein Verfechter der call :Prozesslines "%%l" bei Textverarbeitung. Da arbeite ich den ganzen Schrutz meist in der Forschleife so ab.
was aber so keinen Sinn hätte - ausser die LeerZeilen zu löschen.
@echo off
(
FOR /F "usebackq delims=" %%L in ("Quelle.txt") do (
echo %%L
)
)>"Ziel.txt"
Gruß Phil
Hallo alphabravo,
@pieh-ejdsch: Da schreib ich hier den Text, und wer ist schneller ....
[200 Lines deleted]
Kein Schreibfehler, ist vollkommen erlaubt und immer noch besser als
Weil das fehlschlägt wenn das letzte Zeichen in %Line% eine Zahl ist.
Allgemein gilt, Redirections kann man praktisch an jede Stelle packen und auch beliebig viele davon.
Daher klappt auch sowas einfaches wie die kleine ...
"drei.bat"
Gruß
jeb
@pieh-ejdsch: Da schreib ich hier den Text, und wer ist schneller ....
[200 Lines deleted]
Zitat von @pieh-ejdsch:
wat dat denn? Schreibfehler? Das Meinst Du dann ehern so hier, wenn Du vorher setlocal enabledelayedexpansion benutzt.
echo>> "Ziel.txt" %Line%
Kein Schreibfehler, ist vollkommen erlaubt und immer noch besser als
echo %Line%>> "Ziel.txt"
Allgemein gilt, Redirections kann man praktisch an jede Stelle packen und auch beliebig viele davon.
Daher klappt auch sowas einfaches wie die kleine ...
"drei.bat"
@echo off
<:zwei <nul echo eins & call :zwei
echo %0
Gruß
jeb
Hallo @all!
Vielleicht nur, um nicht die eigentliche Zielsetzung aus den Augen zu verlieren: Ob wohl ein oder mehrere (je nachdem, wie letztlich die Zeilen "bestimmt" werden)
schon reichen würden?
Ansonsten bin ich, was das "Mitnehmen" der Zeile in das Unterprogramm in einer eigenen Variablen angeht, ganz bei PH ...
Grüße
bastla
Vielleicht nur, um nicht die eigentliche Zielsetzung aus den Augen zu verlieren: Ob wohl ein oder mehrere (je nachdem, wie letztlich die Zeilen "bestimmt" werden)
>>Ziel.txt findstr "Zeile" Quelle.txt
Ansonsten bin ich, was das "Mitnehmen" der Zeile in das Unterprogramm in einer eigenen Variablen angeht, ganz bei PH ...
Grüße
bastla