Verzeichnisexistenzpr"ufung von DOS zu NT 4.0 (war: "ohne Bet

Heinrich Allers allers at t-online.de
Mo Jun 14 15:36:48 CEST 1999


Liebe Kolleginnen und Kollegen:

   in dem Text, den ich mein gestern hier angezeigtes 
Verfahren zur Verzeichnisexistenzprüfung begleiten lasse, 
schrieb ich, daß ich nun endlich auch ein Stück dessen 
verstanden hätte, was den Unterschied unter NT 4.0 zwischen 
'cmd.exe' und 'command.com' bei der Eröffnung von DOS-
Prozessen ausmacht.

Zwei Kollegen brachten mich heute erst arg ins Schleudern, als 
sie mich fragten, wo ich denn einen Unterschied sähe: Egal, ob 
das DOS-Fenster mit 'cmd' oder mit 'command' aufgemacht wird, 
die Ergebnisse der von mir unter einer definierten 
Testumgebung vorgeschlagenen Abfolge von Bedingungsprüfungen 
(auf Verzeichnis- und Datei-Existenz) seien identisch.

Mittlerweile habe ich herausbekommen, daß das stimmt, wenn man 
'cmd' oder 'command' wirklich nur zur Bereitstellung des DOS-
Bereitschaftszeichens benutzt.

Baut man aber zwei DOS-Prozesse auf, einmal

als PIF-Datei ("Programm") mit 
c:\winnt\system32\command.com /E:4096 /C c:\temp\direxpr.bat c
bzw.
%system32%\command.com /E:4096 /C c:\temp\direxpr.bat c

und das andere Mal

als LNK-Datei ("Verknüpfung") mit
c:\winnt\system32\cmd.exe /E:4096 /C c:\temp\direxpr.bat c
bzw.
%system32%\cmd.exe /E:4096 /C c:\temp\direxpr.bat c

so sind die Ergebnisse vollkommen verschieden:

Im ersten Fall (mit 'command') kommt als Ergebnis der 36 
Bedingungsprüfungen

 
   Ergebnisse: 
   if exist c:\temp0 - reagiert positiv 
 
 
   if exist c:\temp2\*.* - reagiert positiv 
   if exist c:\temp2\* - reagiert positiv 
 
   if exist c:\temp3\*.* - reagiert positiv 
 
 
   if exist c:\temp5\*.* - reagiert positiv 



heraus, im zweiten Fall (mit 'cmd'):


   Ergebnisse: 
   if exist c:\temp0 - reagiert positiv 
 
   if exist c:\temp1 - reagiert positiv 
   if exist c:\temp1\ - reagiert positiv 
   if exist c:\temp1\*.* - reagiert positiv 
   if exist c:\temp1\* - reagiert positiv 
   if exist c:\temp1\nul - reagiert positiv 
   if exist c:\temp1\nul: - reagiert positiv 
 
   if exist c:\temp2 - reagiert positiv 
   if exist c:\temp2\ - reagiert positiv 
   if exist c:\temp2\*.* - reagiert positiv 
   if exist c:\temp2\* - reagiert positiv 
   if exist c:\temp2\nul - reagiert positiv 
   if exist c:\temp2\nul: - reagiert positiv 
 
   if exist c:\temp3 - reagiert positiv 
   if exist c:\temp3\ - reagiert positiv 
   if exist c:\temp3\*.* - reagiert positiv 
   if exist c:\temp3\* - reagiert positiv 
   if exist c:\temp3\nul - reagiert positiv 
   if exist c:\temp3\nul: - reagiert positiv 
 
   if exist c:\temp4 - reagiert positiv 
   if exist c:\temp4\ - reagiert positiv 
   if exist c:\temp4\*.* - reagiert positiv 
   if exist c:\temp4\* - reagiert positiv 
   if exist c:\temp4\nul - reagiert positiv 
   if exist c:\temp4\nul: - reagiert positiv 
 
   if exist c:\temp5 - reagiert positiv 
   if exist c:\temp5\ - reagiert positiv 
   if exist c:\temp5\*.* - reagiert positiv 
   if exist c:\temp5\* - reagiert positiv 
   if exist c:\temp5\nul - reagiert positiv 
   if exist c:\temp5\nul: - reagiert positiv 


(Dieses Verfahren des Einbaus der Verzeichnisexistenprüfungs-
Stapeldatei in die Befehlszeile entspricht aber genau dem 
Verfahren, das ich für die Einbindung von Allegros DOS- oder 
vorgeschalteten (wie CockPit oder Dougmenu) Prozessen für 
notwendig halte). 

Der Unterschied ist frappant. Insbesondere zeigt sich, daß 
unter 'command' die Existenz der bei der von mir definierten 
Testumgebung _leeren_ Verzeichnisse c:\temp1 und c:\temp4 
überhaupt nicht wahrgenommen wird!


Mit freundlichen Grüßen:

Heinrich Allers

Goethe-Institut, München
allers at goethe.de


allers at t-online.de
http://home.t-online.de/home/allers




Mehr Informationen über die Mailingliste Allegro