55201
Goto Top

Zeichen innerhalb von ECHO maskieren

Ich habe folgendes Probelm:

Ich möchten den nachfolgenden Code in eine Batchdatei schreiben lassen, von einer anderen Batchdatei.

FOR /F "usebackq tokens=2 delims=:" %%I IN (`%PATH% ^| findstr "SERVERNAME"`) DO @SET SERVER=%%I  


Etwas konkreter:

Skript1.cmd erzeugt eine Datei Skript2.cmd

in Skript1.cmd soll folgende Zeile stehen:

ECHO FOR /F "usebackq .....>>Skript2.cmd  

Skript2.cmd soll anschließend eine Datei auswerten können, um sich von dort Variablen herzuziehen.

z.B.:
H:\bin>type variables.txt
SERVERNAME:blabla
USERNAME:user1


Hier nun das Probelm:

Ich komme hierbei mit der Maskierung der "%" und "|" Zeichen nicht klar

Folgende Zeilen innherhalb von Skript1.cmd:
@echo off
SET PATHFILE=H:\bin\variables.txt

ECHO @echo off>Skript2.cmd
ECHO FOR /F "usebackq tokens=2 delims=:" ^%%I IN (`%PATHFILE% ^| findstr "SERVERNAME"`) DO @SET SERVER=^%%I>>Skript2.cmd  
ECHO FOR /F "usebackq tokens=2 delims=:" %%I IN (`%PATHFILE% ^| findstr "SERVERNAME"`) DO @SET SERVER=%%I>>Skript2.cmd  
ECHO FOR /F "usebackq tokens=2 delims=:" %%%I IN (`%PATHFILE% ^| findstr "SERVERNAME"`) DO @SET SERVER=%%%I>>Skript2.cmd  

Erzeugt folgende Einträge in Skript2.cmd:
@echo off
FOR /F "usebackq tokens=2 delims=:" %I IN (`H:\bin\variables.txt | findstr "SERVERNAME"`) DO @SET SERVER=%I  
FOR /F "usebackq tokens=2 delims=:" %I IN (`H:\bin\variables.txt | findstr "SERVERNAME"`) DO @SET SERVER=%I  
FOR /F "usebackq tokens=2 delims=:" %PATHFILE%I  


Hat jemand eine Idee, wie ich die Zeile im ECHO schreiben muss, dass die korrekte, unten noch einmal genannte Zeile in Skript2.cmd geschrieben wird?

FOR /F "usebackq tokens=2 delims=:" %%I IN (`%PATH% ^| findstr "SERVERNAME"`) DO @SET SERVER=%%I  

Content-Key: 71889

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

Printed on: April 25, 2024 at 16:04 o'clock

Member: Biber
Biber Oct 25, 2007 at 11:17:08 (UTC)
Goto Top
Moin sebrab,

versuch es so in deinem Schreib-mir-den-Batch-Schnipsel:
@Echo FOR /F "usebackq tokens=2 delims=:" ^%%%%I IN (`%%PATH%% ^| findstr "SERVERNAME"`) DO @SET SERVER=%%%%I>test,bat  

Gruß
Biber
Mitglied: 55201
55201 Oct 25, 2007 at 11:47:41 (UTC)
Goto Top
Hi Biber,

danke für die Antwort, es funktioniert auch soweit mit den "%" Zeichen. Das maskierte "|" Zeichen ist aber weiterhin nicht zu sehen.

Dies (Skript1.cmd):
@ECHO @echo off>Skript2.cmd
@ECHO SET PATHFILE=H:\bin\variables.txt>>Skript2.cmd
@Echo FOR /F "usebackq tokens=2 delims=:" ^%%%%I IN (`type %%PATHFILE%% ^| findstr "SERVERNAME"`) DO @SET SERVER=%%%%I>>Skript2.cmd  

erzeugt dies (Skript2.cmd):
@echo off
SET PATHFILE=H:\bin\variables.txt
FOR /F "usebackq tokens=2 delims=:" %%I IN (`type %PATHFILE% | findstr "SERVERNAME"`) DO @SET SERVER=%%I  

Ich erhalte beim ausführen von Skript2 folgende Fehlermeldung.
H:\bin>Skript2.cmd
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.  

Auch ein 2. "^" vor dem "|" Zeichen hat nicht funktioniert.


Folgendes erzeilt aber das richtige Ergebnis:
@ECHO FOR /F "usebackq tokens=2 delims=:" ^%%%%I IN (`type %%PATHFILE%% ^^^| findstr "SERVERNAME"`) DO @SET SERVER=%%%%I>>Skript2.cmd  
Member: Biber
Biber Oct 25, 2007 at 12:37:59 (UTC)
Goto Top
Sorry, sebrab,

auf das Caret und das Pipe-Symbol hatte ich gar nicht mehr geachtet - Du hast Recht, die müssen auch maskiert werden.

Die vorhandenen %-Zeichen dagegen nur verdoppelt, nicht maskiert.
@Echo FOR /F "usebackq tokens=2 delims=:" %%%%I IN (`%%PATH%% ^^^| findstr "SERVERNAME"`) DO @SET SERVER=%%%%I>test.bat  

Grüße
Biber
Mitglied: 55201
55201 Oct 26, 2007 at 06:29:17 (UTC)
Goto Top
Ok,
danke noch mal für die Hilfe.

Grüße
sebrab