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