Batch soll Sonderzeichen nicht als solche interpretieren
Guten Morgen 
ich lese aus einer CSV Datei mehrere Variablen wie folgt ein:
Wenn jetzt eine der Variablen & oder () Zeichen enthällt, setzt mein Programm sie als das ein was sie sind.
Gibt es eine Möglichkeit, die in einer Variable enthaltenen Sonderzeichen zu ignorieren, das z.b. folgende Beispiele funktionieren?
Wegen den Klammern im Program Files (x86) Ordner werden die If-Schleifen unterbrochen.
Anderes Beispiel:
Nach einigem Testen hab ich es soweit hinbekommen, dass zumindest das & Zeichen in einer Variable keine Probleme mehr macht, wenn man die Variable so setzt:
Allerdings hab ich dann auch die "" Zeichen direkt in der Variable und ich müsste das Programm dahingehend abändern, dass alle "" um die Variable herum später nicht mehr benutzt werden (bsp: /RP %Password% statt /RP "%Password%")
Ich hoffe ihr könnt mir da helfen
Und nachdem ich gerade versucht habe, diesen Text mit Zeilennummern ect zu formatieren, was ich aber trotz der guten Hilfe einfach nicht hinbekomme, würd ich gern wissen wie soetwas geht.
Edit:
Nachdem ich noch einmal etwas probiert habe, bin ich zu dem Schluss gekommen, das ich eine Variable die () enthällt überall in meinem Programm benutzen kann, solange diese in "" steht.
Das ist sonst kein Problem, allerdings an einer Stelle stört es mich sehr, da ich die Variable später in eine Textdatei schreibe, die im HTML Format als eMail Body dient.
Das Ganze sieht dann so aus:
Quelle:
Ergebnis ist dann später: Quelle:
An dieser Stelle stören mich die "" und ich weiss einfach nicht wie ich sie dort wegbekomme ...
ich lese aus einer CSV Datei mehrere Variablen wie folgt ein:
//Zeile=Variable1;Variable2;Variable3 ...//
//for /F "tokens=1-7 delims=;" %%A IN ("%Zeile%") DO (//
// Call set "Var1=%%A"//
// Call set "Var2=%%B"//
// Call set "Var3=%%C"//
// Call set "Var4=%%D"//
// Call set "Var5=%%E"//
// Call set "Var6=%%F"//
// Call set "Var7=%%G"//
//)//
Wenn jetzt eine der Variablen & oder () Zeichen enthällt, setzt mein Programm sie als das ein was sie sind.
Gibt es eine Möglichkeit, die in einer Variable enthaltenen Sonderzeichen zu ignorieren, das z.b. folgende Beispiele funktionieren?
//set Aktion=Sichern//
//set Quelle=C:\Program Files (x86)\MeinProgrammDasGesichertWerdenSoll//
//set Ziel=D:\Sicherung//
//i /i "%Aktion%"=="Sichern" (//
// echo ich sichere jetzt mal was ...//
// robocopy /e /r:0 /w:0 /xj "%Quelle%" "%Ziel%"//
// if exist "%Ziel%\Datei123.exe" (//
// echo Der Ordner "%Quelle%" wurde erfolgreich gesichert.//
// ) else (//
// echo Der Ordner "%Quelle%" wurde nicht gesichert//
// )//
//)//
Wegen den Klammern im Program Files (x86) Ordner werden die If-Schleifen unterbrochen.
Anderes Beispiel:
//set Zeile=Pass&Wort//
//for /F "tokens=1 delims=;" %%B IN ("%Zeile%") DO Call set "Password=%%B"//
// //
//schtasks /create /S %COMPUTERNAME% /RU "%User%" /RP "%Password%" %SpecialParameter% /TN "%TaskName%" /TR """"%Program%"""" /ST %TaskStartTime% /SC "%Frequency%" /D %Days%//
Nach einigem Testen hab ich es soweit hinbekommen, dass zumindest das & Zeichen in einer Variable keine Probleme mehr macht, wenn man die Variable so setzt:
//for /F "tokens=1 delims=;" %%B IN ("%Zeile%") DO Call set Password="%%B"//
Allerdings hab ich dann auch die "" Zeichen direkt in der Variable und ich müsste das Programm dahingehend abändern, dass alle "" um die Variable herum später nicht mehr benutzt werden (bsp: /RP %Password% statt /RP "%Password%")
Ich hoffe ihr könnt mir da helfen
Und nachdem ich gerade versucht habe, diesen Text mit Zeilennummern ect zu formatieren, was ich aber trotz der guten Hilfe einfach nicht hinbekomme, würd ich gern wissen wie soetwas geht.
Edit:
Nachdem ich noch einmal etwas probiert habe, bin ich zu dem Schluss gekommen, das ich eine Variable die () enthällt überall in meinem Programm benutzen kann, solange diese in "" steht.
Das ist sonst kein Problem, allerdings an einer Stelle stört es mich sehr, da ich die Variable später in eine Textdatei schreibe, die im HTML Format als eMail Body dient.
Das Ganze sieht dann so aus:
Quelle:
<a href="C:\Program Files (x86)\MeinprogrammDasGesichertWerdenSoll">"C:\Program Files (x86)\MeinprogrammDasGesichertWerdenSoll"</a>
Ergebnis ist dann später: Quelle:
C:\Program Files (x86)\MeinprogrammDasGesichertWerdenSoll
An dieser Stelle stören mich die "" und ich weiss einfach nicht wie ich sie dort wegbekomme ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169980
Url: https://administrator.de/forum/batch-soll-sonderzeichen-nicht-als-solche-interpretieren-169980.html
Ausgedruckt am: 21.04.2025 um 11:04 Uhr
5 Kommentare
Neuester Kommentar

Hallo,
auf die Beispiele kann ich mangels Zeit nicht konkret eingehen. Es gibt Möglichkeiten, die Dich etwas weiterbringen. Allerdings bist Du definitiv im Grenzbereich des Machbaren.
Daher nur ein paar Tipps:
1.) Entwertung von Sonderzeichen
Du kannst die Bedeutung bzw. Funktion von Sonderzeichen aufheben, indem Du vor das zu entwertende Sonderzeichen das Zirkumflex-Zeichen setzt - also das hier: ^
Beispiel: Aufhebung der Umlenkungssymbole < und >
Das Zirkumflex-Zeichen kann auch entwertet werden, indem man es verdoppelt z.B. echo _
2.) Zeichenersetzung bei Auflösung von Variablenwerten
Du kannst bei der Auflösung von Variablenwerten festlegen, ob ein (oder mehrere) Zeichen durch ein (oder mehrere oder kein) Zeichen ersetzt werden soll.
Syntax:
Beispiel:
3.) Klammern loswerden
auf die Beispiele kann ich mangels Zeit nicht konkret eingehen. Es gibt Möglichkeiten, die Dich etwas weiterbringen. Allerdings bist Du definitiv im Grenzbereich des Machbaren.
Daher nur ein paar Tipps:
1.) Entwertung von Sonderzeichen
Du kannst die Bedeutung bzw. Funktion von Sonderzeichen aufheben, indem Du vor das zu entwertende Sonderzeichen das Zirkumflex-Zeichen setzt - also das hier: ^
Beispiel: Aufhebung der Umlenkungssymbole < und >
echo ^<a href=....^>....^</a^>
Das Zirkumflex-Zeichen kann auch entwertet werden, indem man es verdoppelt z.B. echo _
2.) Zeichenersetzung bei Auflösung von Variablenwerten
Du kannst bei der Auflösung von Variablenwerten festlegen, ob ein (oder mehrere) Zeichen durch ein (oder mehrere oder kein) Zeichen ersetzt werden soll.
Syntax:
%variablenname:originalzeichen=ersatzzeichen%
Beispiel:
set blank=^
echo %blank:&=^&%
3.) Klammern loswerden
for %i in ("C:\Program Files (x86)") do echo Text ohne Klammern: %~i
Aloha,
nun, du hast dein Problem ja mehr oder minder schon selbst gelöst, denn die Hauptursache waren in beiden Fällen nun einmal die fehlenden Zollzeichen, wie ich dir auch noch einmal an meinem cmd prompt beweisen möchte.
Wenn du überflüssige " " in "%%B" weghaben willst, musst du fpschultzes Hinweis #3 nehmen, denn "%%~B" entfernt keine Klammern, sondern überflüssige Zollzeichen.
So und weil ich Postings ohne code-Tags gar nicht mag, ist mir dein Beitrag inzwischen zu wirr, wenn mittendrin irgendwas steht und dann wieder was neues und dann noch anders ...
In Sachen Zeilennummern sage ich nur
Als Beispiel, wenn es derartiges ist, was du suchst.
Das mit dem Endergebnis Pfad ohne Zollzeichen verstehe ich nicht ganz, was nutzt der Pfad ohne Zollzeichen? Wo geschieht die Ausgabe, im HTML?
greetz André
nun, du hast dein Problem ja mehr oder minder schon selbst gelöst, denn die Hauptursache waren in beiden Fällen nun einmal die fehlenden Zollzeichen, wie ich dir auch noch einmal an meinem cmd prompt beweisen möchte.
E:\Skripte>set "Quelle=C:\Program Files (x86)"
E:\Skripte>set "Var1=Es & War (Einmal)"
E:\Skripte>echo "Es & War (Einmal)"
"Es & War (Einmal)"
E:\Skripte>if "ABC" == "ABC" (
dir /b /ad "C:\Program Files (x86)" 1>nul
if exist "C:\Program Files (x86)\Adobe" (echo Ja, existiert ) else (echo Nein,
nicht da )
)
Ja, existiert
E:\Skripte>pause
Wenn du überflüssige " " in "%%B" weghaben willst, musst du fpschultzes Hinweis #3 nehmen, denn "%%~B" entfernt keine Klammern, sondern überflüssige Zollzeichen.
So und weil ich Postings ohne code-Tags gar nicht mag, ist mir dein Beitrag inzwischen zu wirr, wenn mittendrin irgendwas steht und dann wieder was neues und dann noch anders ...
In Sachen Zeilennummern sage ich nur
C:\Users\Melphiz>@for /f "delims=: tokens=1,2" %s in ('findstr /n "^" "E:\Skript
e\namen.txt"') do @echo %s %t
1 1 2
2 ersetzen
3 originak
4 suchen
5 zähler
Das mit dem Endergebnis Pfad ohne Zollzeichen verstehe ich nicht ganz, was nutzt der Pfad ohne Zollzeichen? Wo geschieht die Ausgabe, im HTML?
greetz André
Hallo ForgottenRealm,
zum Ausgeben von Variablen mit Sonderzeichen gibt es auch noch das hier:
Die Anführungszeichen werden dabei nicht ausgegeben.
Um die Anführungszeichen in der Variablen
wegzubekommen, musst Du
schreiben. Auf jeden Fall immer zu empfehlen ist es, die komplette Zuweisung von
Den
Gruß
Friemler
zum Ausgeben von Variablen mit Sonderzeichen gibt es auch noch das hier:
if 1 equ 1 (
<NUL set /p "=Hier mal ein paar Sonderzeichen: &<>|%()"
echo.
)
SET /P
dient ja eigentlich zum Einlesen von Benutzereingaben. Wenn man den Variablenbezeichner vor dem Gleichheitszeichen weglässt, wird nur der Text ausgegeben. Das <NUL
simuliert den Druck auf ENTER. Da nach dem Text kein Zeilenumbruch erzeugt wird, muss man den noch mit ECHO.
manuell erzeugen.Um die Anführungszeichen in der Variablen
Password
beifor /F "tokens=1 delims=;" %%B IN ("%Zeile%") DO Call set Password="%%B"
for /F "tokens=1 delims=;" %%B IN ("%Zeile%") DO set "Password=%%B"
SET
-Befehlen eben wegen diesen vermaledeiten Sonderzeichen in Anführungszeichen zu setzen.Den
CALL
-Befehl vor einem SET
brauchst Du übrigens nur in bestimmten Sonderfällen, z.B. hier:set "test=Hallo Welt"
set "word=Welt"
set "word2=Du da"
echo %test%
call set "test=%%test:%word%=%word2%%%"
echo %test%
Gruß
Friemler
Aloha,
wenn du einen Beitrag/Kommentar erstellst, leuchtet ganz toll rot das Wort Formatierungshilfe und dort findest du dann auch die aber das nur nebenbei.
So, wenn ich es also recht betrachte, stören dich die Zollzeichen also nur der Optik wegen ... (wer gibt auch schon den Pfad als Anzeigenamen an *gg*)
greetz André
wenn du einen Beitrag/Kommentar erstellst, leuchtet ganz toll rot das Wort Formatierungshilfe und dort findest du dann auch die aber das nur nebenbei.
So, wenn ich es also recht betrachte, stören dich die Zollzeichen also nur der Optik wegen ... (wer gibt auch schon den Pfad als Anzeigenamen an *gg*)
greetz André