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-ID: 180364

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

bastla
bastla 10.02.2012 um 14:56:10 Uhr
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
SlainteMhath
SlainteMhath 10.02.2012 um 14:58:13 Uhr
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
Biber
Biber 10.02.2012 um 15:00:13 Uhr
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]
bastla
bastla 10.02.2012 um 15:00:49 Uhr
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
bastla
bastla 10.02.2012 um 15:01:43 Uhr
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
OKIDOKI
OKIDOKI 10.02.2012 um 20:44:26 Uhr
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!)
60730
60730 10.02.2012 um 22:48:50 Uhr
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.