Hallo,
A. K. schrieb:
> Du solltest schon die richtige Frage stellen. Das geht einfacher: if exist
c:\test.txt exit 1 & exit 0
> Ist ausserdem nebenwirkungsfrei, weil ohne Ausgabe.
Das mit der richtigen Frage ist natürlich so eine Sache. Mir war Anfangs
lediglich die Sache mit den Umgebungsvariablen nicht klar.
Du hast natürlich recht der Befehlt "if exist" ist hier sicher
eleganter. Allerdings ist in dem Beispiel von Dir der Befehl "exit 0"
wirkungslos. Dies lässt sich leicht überprüfen, wenn man "exit 0" z. B.
durch "exit 5" ersetzt und nach einer Datei suchen lässt die nicht
existiert. Ersetzt man in Deinem Beispiel "&" durch "else" und schließt
"exit 1" in rund Klammern ein funktioniert es.
1 | cmd.exe "/c if exist c:\test.txt (exit 1) else exit 5"
|
A. K. schrieb:
> Ich kenne dieses FAMOS nicht, aber eigentlich müsste bei deiner Zeile
> das Gleiche rauskommen wie bei ... Execute("cmd.exe", "/c ~034dir
c:\test.txt~034", ...
> denn der Exit-Status ist ohnehin der Errorlevel des letzten Kommandos.
Damit hast Du vollkommen recht. Ich habe es gerade getestet. Ich wusste
nicht, dass der %errorlevel% durchgereicht wird. Ich dacht bisher ich
erhalte nur den %errorlevel% der mir angibt, ob der Befehlsinterpreter
ordnungsgemäß beendet wurde.
Abschließend noch für alle FAMOS interessierten: Zum Überprüfen, ob eine
Datei bzw. ein Pfad existiert reicht folglich der Befehl
1 | Result = Execute("cmd.exe", "/c dir c:\test.txt", "", 2, -1)
|
oder
1 | Result = Execute("cmd.exe", "/c if exist c:\test.txt exit 1", "", 2, -1)
|
wobei zu beachten ist, dass sich die o. g. Befehle bezüglich der
Rückgabewerte unterschiedlich verhalten.
[Edit]
Bitte beachten: Sollen die o. g. Beispiele auch mit Dateinamen
funktionieren, die Leerzeichen enthalten, muss man noch ein paar
Anführungszeichen (~034) einfügen. Das Grundkonzept sollte mit den
Beispielen jedoch klar werden.
[/Edit]
Mit freundlichen Grüßen
Guido