Kun je werken met ALS/IF in een batch?

Status
Niet open voor verdere reacties.

Tijger81

Gebruiker
Lid geworden
2 jan 2010
Berichten
397
Kan ik van deze taal een batch maken:

Als service "Novell Zenworks Agent Service" al gestart is:
Dan
C:\zac cc
C:\zac refresh

Als service "Novell zenworks agent service" niet gestart is:
Dan
Net Start "Novell zenworks agent service"
En:
C:\zac cc
C:\zac refresh

Wie kan mij helpen? Ik denk dat voor ALS=IF moet komen, maar hoe moet je de code maken
die kijkt of de service al gestart is?
 
Afhankelijk van je Windows versie zou je het volgende kunnen gebruiken:

Code:
net start | find /i "Servicenaam"
if errorlevel 1 echo Service naam draait niet
if not errorlevel 1 echo Service naam is gestart
pause

Je kunt ook eens kijken naar het WMIC commando.
WMIC /? geeft de mogelijkheden.
Je kunt de services dan uitvragen op een SQL-achtige manier.

Voorbeeld:
wmic service where (name="Je servicenaam" and state="Running")

Maar de eerste mogelijkheid is een stuk eenvoudiger.

De echte service naam bevat geen spaties en kun je vinden door in services.msc de eigenschappen op te vragen.
 
Laatst bewerkt:
windows 7

Uitkomst is dan:

Net start find /i "novell zenworks agent service"
If errorlevel 1 echo
Net start "novell zenworks agent service"
C:\zac cc
C:\zac refresh

If not errorlevel 1 echo
C:\zac cc
C:\zac refresh

Exit

Klopt dit?




Afhankelijk van je Windows versie zou je het volgende kunbruiken:

Code:
net start | find /i "Servicenaam"
if errorlevel 1 echo Service naam draait niet
if not errorlevel 1 echo Service naam is gestart
pause

Je kunt ook eens kijken naar het WMIC commando.
WMIC /? geeft de mogelijkheden.
Je kunt de services dan uitvragen op een SQL-achtige manier.

Voorbeeld:
wmic service where (name="Je servicenaam" and state="Running")
 
Dat zou het moeten zijn inderdaad.
Kijk alleen even wat de echte servicenaam moet zijn.

NB:
Je hoeft niet te quoten als je direct op een vorig bericht reageert.
 
Wat is quoten dan? Wat betekent eigenlijk het verticale streepje tussen net start en find in de code?
 
Quoten is als je drukt op de Quote knop in plaats van direct je bericht in te tikken.
Het bericht waar je op reageert wordt dan herhaald in je eigen bericht.
Dat is erg handig, maar niet nodig als je direct op een vorig bericht reageert.
 
Graag gedaan :)
 
Oh nog 1 vraagje. Kan ik tussen regel: net start "blah blah " en C:\zac cc time out inbouwen van 2 seconden zodat de service iets meer tijd heeft om te starten?
 
Ik zei iets te snel dat het wel klopte maar ik denk dat het zo moet zijn:

Code:
Net start find /i "novell zenworks agent service"
If errorlevel 1 Net start "novell zenworks agent service"
C:\zac cc
C:\zac refresh

Zo heb je de code gecombineerd en hoef je geen dingen dubbel uit te voeren.
Maar nogmaals, kijk even goed naar de echte servicenaam in de eigenschappen van die service.
Wat je nu gebruikt zal de omschrijving van de service zijn.

Wat het wachten betreft kun je in de eigenschappen van de service aangeven dat hij uitgesteld moet starten. (Delayed start)
 
Laatst bewerkt:
Het pipeline teken ontbreekt in de eerste regel. En er is nog wel meer fout (er wordt "te laat" getest op if not errorlevel 1).
Dus moet het worden (lijkt mij):
Code:
Net start | find /i "novell zenworks agent service"
If errorlevel 1 echo Zenworks draait niet, wordt nu gestart && Net start "novell zenworks agent service" && C:\zac cc && C:\zac refresh
If not errorlevel 1 echo Zenworks draait al && C:\zac cc && C:\zac refresh
Exit

EDIT: Ik zie dat edmoor zijn code ook zojuist heeft aangepast, maar ook bij hem ontbreekt het pipeline teken (in de vorige posting).

Tijs.
 
Laatst bewerkt:
Collega dnties heeft helemaal gelijk! :D
*Toch nog een biertje opentrekt..."
 
Proost. Maar ik wil niet de service vertragen mar de zac cc opdracht die erna komt.
 
Vertragen? Ik begrijp niet wat je bedoelt. Ik vind in je startposting ook niets over vertragen terug.

Tijs.
 
Een leuke om een pause van bijvoorbeeld 5 seconden te gebruiken in een batch file is de volgende:
ping -n 5 127.0.0.1 > nul
 
Dat geloof ik direct ;)
 
Dat vertragen laat ik wel zitten. Ik was alleen bang omdat het starten van de service heel even duurt dat de batch het commando van de volgende regel al gaat uit voeren, want dan gaat het mis. Of wacht een batch of een commando helemaal voltooid is voordat hij het nieuwe commando laat beginnen?
 
Elke opdracht wordt eerst uitgevoerd voordat de volgende wordt uitgevoerd. Ik heb dan ook geen vertraging ingebouwd.

Tijs.
 
Wie kan mij helpen? het werkt nog niet

Bekijk bijlage 184956
Ik heb de code geprobeerd. Hij herkend de service wel alleen ziet zac cc niet (zie bijlage:verwijzing zac.exe heb ik inmiddels aangepast)). Zac cc en zac refresh zijn parameters in het zac.exe bestand. Hoe laat ik die activeren?
Ik heb dit gemaakt:
Net start | find /i "novell zenworks agent service"
If errorlevel 1 echo Zenworks draait niet, wordt nu gestart && Net start "novell zenworks agent service" && C:\Program Files (x86)\Novell\ZENworks\bin\zac.exe zac cc && C:\Program Files (x86)\Novell\ZENworks\bin\zac.exe zac refresh
If not errorlevel 1 echo Zenworks draait al && C:\Program Files (x86)\Novell\ZENworks\bin\zac.exe zac cc && C:\Program Files (x86)\Novell\ZENworks\bin\zac.exe zac refresh
pause
Exit






Elke opdracht wordt eerst uitgevoerd voordat de volgende wordt uitgevoerd. Ik heb dan ook geen vertraging ingebouwd.

Tijs.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan