Hallo,
seit langem arbeite ich mit Windows native Shell Scripts.
Jetzt habe ich ein Script, in dem ich die Umgebung neu setze mit
setlocal
Leider führt das dazu, dass der errorlevel konstant auf 0 oder 1 gesetzt wird (je nach übergebenen Parametern) und dann bei neuen Befehlen der errorlevel nicht mehr gemäß dem Ausführungserfolg der neuen Befehle neu gesetzt wird.
Ich muss den Schreibzugriff auf ein Verzeichnis prüfen, bevor ich dort etwas hin schreibe und möchte, dass das Skript über normale Routinen sanft aussteigt, wenn kein Zugriff besteht.
Ein Umweg wäre: erst versuchen hin zu schreiben und danach mit if exists abzuprüfen:
Aber das ist mir zu unsauber. Lieber wäre mir eine Prüfung mit errorlevel.
Der Einfachheit halber kann man das mit einem CD-LW testen.
Ob eine CD/DVD drin liegt kann man mit if exists prüfen.
Sobald eine drin liegt, bekommt man u.U errorlevel 9009.
Leider bekommt man den nur beim ersten mal Abprüfen.
Zwar sagt er ab dem 2. Mal immer noch "Access denied", aber er setzt keinen errorlevel mehr.
Das hier funktioniert auch nicht:
for /F "delims=xxx" %%i in ('echo Test the Log ^>%Log%') DO set amTestLogEcho=%%i
Wobei hier die Idee war, die Worte einzufangen (Access denied).
Das geht nicht, weil der Befehl in den runden Klammern nicht ausgeführt wird, sondern "Access denied" bringt.
Das mit setlocal und dem errorlevel ist alles total buggy, wie mir scheint.
Kann nicht ein Microsoft MVP eine Behebung in die Gänge bringen…?
Oder weiß einer Rat?
Bitte keine Tipps, ich möchte gefälligst umsteigen auf …, :
nimm Perl // mache ich nicht, nur Bordmittel sind hier erlaubt
nimm Powershell // will ich auch nicht, da es erst extra installiert werden muss.
Eigentlich möchte ich, dass die Bugs behoben werden.
Danke und Gruß