okidoki
Goto Top

Batch assoc auslesen und verarbeiten

Guten Tag,

leider scheitere ich bei assoc auslesen:
Ich möchte gerne wissen, ob Excel 12 installiert ist. Wenn nicht, soll eine andere Sprungmarke erreicht werden

@echo off
assoc .xlsx |FIND "12"  
if errorlevel=0 GOTO vorhanden
if errorlevel=1 GOTO fehlt

:weg
cls
echo Excel vorhanden
Pause

:fehlt
cls
echo Excel fehlt
Pause

echo ende
Pause

Würde mich über Hilfe freuen!
OKIDOKI

Content-Key: 180364

Url: https://administrator.de/contentid/180364

Printed on: April 16, 2024 at 13:04 o'clock

Member: bastla
bastla Feb 10, 2012 at 13:56:10 (UTC)
Goto Top
Hallo OKIDOKI!

Vorweg: Wenn Du unterschiedliche Zweige verwendest, solltest Du deren Ende anders (= mit einem "goto") als nur mit "Pause" gestalten ...

... ansonsten:
assoc .xlsx |FIND "12"||goto :fehlt  
cls
echo Excel vorhanden
pause
goto :ende

:fehlt
cls
echo Excel fehlt
pause

:ende
echo ende
pause
... und ganz nebenbei: Wenn Du aus einer CMD-Shell heraus testest, wirst Du "pause" viel weniger oft benötigen ..

Alternativvariante:
cls
assoc .xlsx |FIND "12" && (  
    echo Excel vorhanden
) || (
    echo Excel fehlt
)
pause
echo ende
pause
Grüße
bastla
Member: SlainteMhath
SlainteMhath Feb 10, 2012 at 13:58:13 (UTC)
Goto Top
Moin,

evtl. liegt daran, das GOTO und definierte Sprungmarken nicht übereinstimmen?

[...]
GOTO vorhanden
[...]
:weg
[...]
:fehlt

und die errorlevel-Abfrage sieht eigentlich immer so
if %errorlevel%==0 goto ...
aus.

lg,
Slainte

/EDIT: Ah, bastla war mal wieder schneller (und ausführlicher) face-smile
Member: Biber
Biber Feb 10, 2012 at 14:00:13 (UTC)
Goto Top
Moin OKIDOKI,

den ErrorLevel musst du immer vom höchsten erwarteten bis zum niedrigsten möglichen (=0 == kein Fehler) prüfen.

Dein Schnipsel könnte durchaus arbeiten wie designed, wenn du die Zeilen 03 und 04 vertauschst.

Grüße
Biber
[Edit] ....diese Rechtssüberholer hier ...*tztztz [Edit]
[Edit2] @bastla
und das unnötige "=" entfernst ...
Zu meiner Überraschung schluckt M$ dieses versehentliche "=" -->
d:\temp>if errorlevel=1 echo zzz
zzz

d:\temp>if errorlevel=2 echo zzz

d:\temp>if errorlevel=0 echo zzz
zzz

d:\temp>echo %errorlevel%
1
[Edit2]
Member: bastla
bastla Feb 10, 2012 at 14:00:49 (UTC)
Goto Top
@SlainteMhath
Es gäbe zwar auch noch die Variante
if errorlevel 1 goto :wherever
(damit wird auf >=1 abgefragt und das funktioniert auch zB innerhalb einer "for"-Schleife), aber ich würde weder noch (siehe oben) verwenden ...

Grüße
bastla
Member: bastla
bastla Feb 10, 2012 at 14:01:43 (UTC)
Goto Top
@Biber
... wenn du die Zeilen 03 und 04 vertauschst
... und [Edit] auch nicht face-wink [/Edit] das [Edit] trotzdem face-wink [/Edit] unnötige ([Edit] und auch für mich überraschend folgenlose [/Edit]) "=" entfernst ...

Grüße
bastla
Member: OKIDOKI
OKIDOKI Feb 10, 2012 at 19:44:26 (UTC)
Goto Top
hey,

mal kurz nicht am Rechner ...

Ich bin schon wieder sprachlos und dankbar!

Nach bastlas Hinweisen habe ich gleich meine ganzen andren errorlevels überprüf und dann verworfen. Außerdem habe ich mir SlainteMhath Hinweis mit den Sprungmarken noch einmal genauer durchgesehen: man muss echt höllisch aufpassen!
Auch Bibers Vorschlag, mit dem Vertauschen der Zeilen war für mich sehr wichtig. Hier hatte ich auch immer geschludert! Anmerkung: manchmal dachte ich, dass er die Sprungemarken dann irgendwie nicht findet. Das lag dann aber bestimmt nicht an der Reihenfolge der errorlevels, sondern vielmehr an an einer verkorksten batch...
Und schließlich möchte ich noch TimoBeil danken, der bracht mich erst auf die Idee mit dem assoc. Dazu gibt es auch so viele Fragen von Leuten, aber ohne Lösungen in anderen Foren. Nur hier wird einem wirklich - super - geholfen.

Vielen Dank euch allen,
OKIDOKI
(ich hoffe, dass auch anderen Usern solche Beiträge helfen!)
Mitglied: 60730
60730 Feb 10, 2012 at 21:48:50 (UTC)
Goto Top
moin,

back-to-topmooooment....

Das ist nicht ganz richtig

"Angenommen", es handelt sich um eine Domainumgebung und der abfragende User ist einer mit nem Servergespeicherten Profil.....

Dann greift das Ding nicht wirklich....

Assoc gibt es sowohl 4 Maschinen als auch 4 Benutzer und damit nicht wirklich geeignet.
Einen Ast von
  • "HKLM\SOFTWARE\WOW6432\Microsoft\Office\12.0\Excel"
  • bzw. "HKLM\Software\Microsoft\Office\12.0\Excel"
  • oder "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" - den genauen hab ich nicht im Kopf.
wäre da vielleicht doch der bessere Weg.

Gruß

PS: >nul 2>nul wirst du sicher auch noch brauchen können.