NT-Batch-Frage

Thomas Berger ThB at gymel.com
Fr Okt 12 08:53:21 CEST 2001


Lieber Herr Allers,

noch etwas ist zu beachten:

Angenommen, ein Parameter %1 enthaelt Spatien (etwa weil
Ihnen der MS-Internet Explorer eine Temporaerdatei
uebergeben will, dann geht das nur so, dass dieser 
Parameter durch Doppelanfuehrungzseichen geschuetzt ist:

test.bat "Heinrich Allers"

Unter Win'9x haben Sie m.W. nun komplett verloren,
jede Konstruktion der Art

if %1 == "Heinrich Allers" echo Hallo!

bringt eine Fehlermeldung, egal ob und welche
Anfuehrungszeichen Sie ergaenzen. 

Unter NT hingegen, welches Anfuehrungszeichen
goutiert, funktioniert alles, ausser den naheliegenden
Doppelanfuehrungszeichen:

if "%1" == ""Heinrich Allers"" echo hallo

ergibt ja durch Expansion ungeschuetzte Spatien,
viel besser waere also eine Konstruktion mit
enfachen Anfuehrungszeichen

if '%1' == '"Heinrich Allers"' echo hallo

und selbst ein kryptisches

if %19 == "Heinrich Allers"9 echo hallo

funktioniert.

Praxisnaeher ist aber der Test auf eine leere
Zeichenkette:

(*) if "%1" == "" echo leer!
    if '%1' == '' echo leer!
    if %19 == 9 echo leer!
    if $%1 == $ echo leer!
funktinieren auf allen Plattformen, nur wenn %1
bereits von Doppelanfuehrungszeichen umschlossen
sein koennte, scheidet (*) aus, weil es unter NT
in diesem Fall einen Syntaxfehler ergibt.

Fazit: Es ist auf keinem Windows-System zu vermeiden,
dass man mit Dateinamen konfrontiert wird, die Spatien
enthalten und folglich in " eingeschlossen sind, wenn
sie als Parameter einer .bat-Datei auftreten. In diesem
Fall muss man sehr sehr vorsichtig sein...
Doppelanfuehrungszeichen sind allerdings das am wenigsten
geeignete Zeichen zum "Retten" von Tests
if %1 == a ...
mit eventuell leeren Variablen.

viele Gruesse
Thomas Berger
(einer der selbst jahrelang "..." um Parameter setzte)




Mehr Informationen über die Mailingliste Allegro