pandaworld78
Goto Top

Batch - Anführungszeichen in Variable

Hallo Forum-Gemeinde,

komm einfach nicht dahinter und hoffentlich kann mir jemand helfen.

Es geht darum, einen oder mehrere beliebige Sätze in eine txt-Datei zu schreiben.

Das Klappt auch soweit.

Nun sollen zum ersten einmal die drei Zeichen "## entfernt werden (mit Anführungszeichen)

Desweiteren auch diese Zeichen ##"

Und ja, anfangs muß ich die Satzzeichen mit rein schreiben in die txt-Datei.


Hier die Batch:


@echo OFF

setLocal EnableExtensions EnableDelayedExpansion

for %%t in (
"##Dieser erste Text soll bleiben##"
"##Dieser zweite Text soll bleiben##"
) do echo.%%t >>erstellte_Textdatei.txt

echo hier_1 && pause

set "search=^"##"
:: -- Hier muß der Fehler liegen: Es soll "## entfernt werden (mit dem Anführungszeichen) --
set "replace="

set "t=temp.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("erstellte_Textdatei.txt") do set "Line=%%i" && set "Line=!Line:%search%=%replace%!" && >>"%t%" echo !Line!
move "%t%" "erstellte_Textdatei.txt"

echo hier_2 && pause

Content-Key: 562680

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

Printed on: April 24, 2024 at 10:04 o'clock

Member: TK1987
TK1987 Apr 03, 2020 at 07:14:09 (UTC)
Goto Top
Moin,

bitte immer Code-tags für das Posten von Code benutzen.


Zitat von @pandaworld78:
set "replace="  
Damit setzt du die Variable erst gar nicht - aber: das musst du auch gar nicht. Der Code ist schlicht unnütz und kann weg.

Du brockst dir das Ganze quasi selbst ein, indem du beim setzen von Variablen immer Anführungsstrichen verwendest.
Genau wie du dann hier
set "search=^"##"  
ein Escapezeichen vor die Anführungsstriche setzt, müsstest du das auch hier tun
set "Line=!Line:%search%=%replace%!"  
was jedoch so nicht möglich ist.

Lass die Anführungszeichen beim setzen von Variablen weg, dann musst du auch nicht escapen und dann funktioniert es auch.
@echo off
setLocal EnableDelayedExpansion

for %%t in (
	"##Dieser erste Text soll bleiben##"  
	"##Dieser zweite Text soll bleiben##"  
	) do echo.%%t >>erstellte_Textdatei.txt

echo hier_1 && pause

set search="##  
set t=temp.tmp

if exist "%t%" del "%t%"  
for /f "usebackq delims=" %%i in ("erstellte_Textdatei.txt") do (  
	set Line=%%i
	set Line=!Line:%search%=!
	>>"%t%" echo !Line!  
	)
move "%t%" "erstellte_Textdatei.txt"  

echo hier_2 && pause 

Gruß Thomas
Member: pandaworld78
pandaworld78 Apr 03, 2020 at 08:10:22 (UTC)
Goto Top
Vielen Dank Thomas !

Sehr plausibel erklärt. Bin nun wieder ein Stück schlauer.

Gruß
Wolfgang