highend01
Goto Top

Zwei Prozentzeichen vor einer Variable in neue .bat Datei schreiben?

Hallo,

ich arbeite hier an einer Batchdatei, die ihre Inhalte in eine neue .bat Datei überträgt (die resultierende .bat Datei wird später auf verschiedenen Rechnern gestartet und muss dafür individualisiert werden).

Der Ausschnitt, um den es geht:

ECHO FOR /F "delims=~" %%A IN ('ECHO %%username%%^> "%%temp%%\~%%username%%" ^& DIR /L /B "%%temp%%\~%%username%%"') DO (>> "%WorkingDir%\%username%.bat"  
ECHO 	SET username=%%A>> "%WorkingDir%\%username%.bat"  
ECHO 	DEL /Q ~%%username%%>> "%WorkingDir%\%username%.bat"  
ECHO )>> "%WorkingDir%\%username%.bat"  

Das Resultat:

FOR /F "delims=~" %A IN ('ECHO %username%> "%temp%\~%username%" & DIR /L /B "%temp%\~%username%"') DO (  
	SET username=%A
	DEL /Q ~%username%
)

Was ich in der Zieldatei benötige, sind die doppelten Prozentzeichen vor dem A.

Wenn ich im Original jetzt allerdings 3 statt 2 Prozentzeichen verwende:

ECHO FOR /F "delims=~" %%%A IN ('ECHO %%username%%^> "%%temp%%\~%%username%%" ^& DIR /L /B "%%temp%%\~%%username%%"') DO (>> "%WorkingDir%\%username%.bat"  
ECHO 	SET username=%%%A>> "%WorkingDir%\%username%.bat"  
ECHO 	DEL /Q ~%%username%%>> "%WorkingDir%\%username%.bat"  
ECHO )>> "%WorkingDir%\%username%.bat"  

um die zwei Prozentzeichen zu erhalten, werden die beiden oberen Zeilen gar nicht mehr in die neue .bat Datei geschrieben.

Wie also bekomme ich ein doppeltes Prozentzeichen in der Zieldatei hin?

Tia,
Highend

Content-Key: 161519

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: Snowman25
Snowman25 Feb 24, 2011 at 14:03:56 (UTC)
Goto Top
Hallo ,

Du musst die Prozentzeichen escapen, damit sie vom Batch-Interpreter als Text interpretiert werden.
Beispiel (direkt auf der Kommandozeile):
U:\>echo ^%^%>test.txt

U:\>type test.txt
%%

Gruß
Snow
Member: Highend01
Highend01 Feb 24, 2011 at 14:08:22 (UTC)
Goto Top
Hi Snow,

wenn ich das tue

ECHO FOR /F "delims=~" ^%^%A IN ('ECHO %%username%%^> "%%temp%%\~%%username%%" ^& DIR /L /B "%%temp%%\~%%username%%"') DO (>> "%WorkingDir%\%username%.bat"  

Dann bekomme ich als Ergebnis das hier raus:

FOR /F "delims=~" A IN ('ECHO %username%> "%temp%\~%username%" & DIR /L /B "%temp%\~%username%"') DO (  

D.h. beide Prozentzeichen, die escaped wurden, landen gar nicht mehr in der Zieldatei.

Gruß,
highend01
Member: Snowman25
Snowman25 Feb 24, 2011 at 14:13:15 (UTC)
Goto Top
Also ECHO FOR /F "delims=~" ^%^%A IN ('ECHO %%username%%^> "%%temp%%\~%%username%%" ^& DIR /L /B "%%temp%%\~%%username%%"') DO (^>^> "%WorkingDir%\%username%.bat" funktioniert bei mir wunderbar.
Ich glaube, das ist immernoch dein vorheriges Ergebnis, da du vergessen hast, die 2 Umleitungszeichen nach dem DO ( zu maskieren.

Gruß
Snow
Member: Highend01
Highend01 Feb 24, 2011 at 14:27:01 (UTC)
Goto Top
Mh, warum sollte ich die Umleitungszeichen für das Schreiben in die neue Batchdatei maskieren, das sollen ja keine "gedruckten Zeichen" werden, sondern dazu dienen, die Zeile der entsprechenden Datei anzufügen?

Wenn ich deine Zeile 1:1 übernehme, landet in der Zieldatei nur noch eine leere Zeile, statt der erwünschten

FOR /F "delims=~" %%A IN ('ECHO %username%> "%temp%\~%username%" & DIR /L /B "%temp%\~%username%"') DO (  

In der Dos Box wird die Zeile zudem aufgelistet (die Original.bat Datei gibt selbst nichts auf der CMD aus):

FOR /F "delims=~" A IN ('ECHO %username%> "%temp%\~%username%" & DIR /L /B "%tem  
p%\~%username%"') DO (>> "D:\Users\Highend\Tools\Rsync\Highend.bat"  

Gruß,
highend01
Member: Snowman25
Snowman25 Feb 24, 2011 at 14:32:22 (UTC)
Goto Top
Tut mir leid Highend, aber dann liegt dein Fehler woanders.
Möglicherweise hier? Wörter in Echo verschwinden - werden gedreht

Gruß
Snow
Member: bastla
bastla Feb 24, 2011 at 14:54:59 (UTC)
Goto Top
Hallo Highend01 und Snow!

Das ist ausnahmsweise eine Situation, in der das Testen an der Kommandozeile nix bringt ...

In einem Batch werden Prozentzeichen verdoppelt benötigt - wenn ich also 2 im Ergebnis haben will, muss ich nicht 3, sondern 4 davon verwenden ...

Grüße
bastla
Member: Highend01
Highend01 Feb 24, 2011 at 15:09:13 (UTC)
Goto Top
Jepp, das ist der Fehler, mit 4 Prozentzeichen bekomme ich in der Zieldatei dann auch tatsächlich die 2, die übrig bleiben sollen.

Danke für die Hilfestellung!
Member: jeb-the-batcher
jeb-the-batcher Feb 24, 2011 at 15:23:10 (UTC)
Goto Top
Hallo,

@Snowman25:
Das Escapen von %-Zeichen klappt nicht mit ^, sondern ausschliesslich mit % (also Effektiv %% wie bastla schon geschrieben hat).

Das % ist übrigens das einzige Zeichen welches nicht auf ^ reagiert

Grüße
jeb
Member: Snowman25
Snowman25 Feb 24, 2011 at 15:25:54 (UTC)
Goto Top
Hallo jeb,

Dann hatte mein Gefühl doch recht, dass irgendetwas nicht ganz stimmt...
Ab und zu vergisst man sowas eben, wenn man selbst nie über das Problem stolpert face-smile

Gruß
Snow