84075
Goto Top

Batchfile Verbesserungsvorschlag

Servus Leute,

ich habe folgendes Skript das mir meine Services startet nachdem ich diese eingerichtet habe. Was mich nur stört ist das ich den neu eingerichteten Service immer ins Batchfile eintragen muss damit dieser dann beim Aufruf läuft. Es handelt sich dabei um Lizenzservices - deren Vendor Daemons und Lizenzfiles liegen auf allen drei Servern imm unter dem gleichen Pfad D:\services. Kann man das Skript so umschreiben daser dieses Verzeichnis beim start durchsucht und alle Verzeichnisse/Services die unter D:\services liegen dann selber ins batch einträgt?!?! SPRICH: ich will nicht immer das batch öffnen müssen und den neu eingerichteten Service manuell eintragen.

@echo off & setlocal

SET /p servicename=Bitte geben Sie den Service ein den Sie starten wollen:

if "%servicename%"=="service1" goto start  
if "%servicename%"=="service2" goto start  
if "%servicename%"=="service3" goto start  

goto error
:start
sc \\server01 start %servicename%
sc \\server02 start %servicename%
sc \\server03 start %servicename%
PAUSE

Content-Key: 146507

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

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

Mitglied: 77559
77559 Jul 08, 2010 at 12:36:05 (UTC)
Goto Top
Hallo,
mir ist nicht klar wie so ein servicename respektive die zugehörigen Dateien examplarisch aussehen.

ansonsten kannst du Redundanz z.Bsp so reduzieren:

@Echo off & Setlocal
SET /p servicename=Bitte geben Sie den Service ein den Sie starten wollen:
For %%A in ("service1" "service2" "service3") Do if "%servicename%" EQU %%A Goto :start   

goto error
:start
For %%A in ( 01 02 03) Do sc \\server%%A start %servicename%

Grüß
LotPings
Mitglied: 84075
84075 Jul 08, 2010 at 12:42:43 (UTC)
Goto Top
also immer wenn ich einen neuen service einrichte muss ich folgendes machen:

1. service einrichten
2. das obige batch öffnen
3. service1,service2, service3 .... manuell eintragen

Die ganzen services liegen in den Verzeichnissen D:\services. Will einfach nur wenn ich das batch starte, das das skript dieses verzeichnis durchscannt und wenn ein neues verzeichnis drinliegt, das er dieses verzeichnis in meine batch nimmt also den namen des verzeichnisses wie z.b. (service1, service2, service3......)
Mitglied: 60730
60730 Jul 08, 2010 at 12:51:13 (UTC)
Goto Top
moin,

rem status== ungetestet@echo off 
setlocal
cls
echo Dienste:
dir d:\services /b /AD
SET /p servicename=Bitte geben Sie den Service ein den Sie starten wollen:
dir d:\services /S /AD |find /i "%servicename%" && goto start  
rem oder
if exist "d:\services\%servicename%\" goto start  
goto error
:start
sc \\server01 start "%servicename%"  
sc \\server02 start "%servicename%"  
sc \\server03 start "%servicename%"  
PAUSE

Gruß
Mitglied: 77559
77559 Jul 08, 2010 at 12:56:18 (UTC)
Goto Top
Das war keine sehr hilfreiche Antwort face-sad

DU weist also was DU gemacht hast, aber woher soll die Batch das wissen?
Du könntest die bekannten Serviceses in einer Datei festhalten und unbekannte starten, oder das Einrichten gleich mit über die Batchdatei starten,
aber hey deine Abläufe kennst du selber am Besten.

Gruß
LotPings
Member: Dani
Dani Jul 08, 2010 at 13:00:18 (UTC)
Goto Top
@77559
Indirekt hat er eine Antwort gegeben... ich übersetze mal:
Er möchte gerne die Batch so umbauen, dass er nicht mehr manuell die Dienste (Services) in die Batch eintragen muss sondern, dass die Batch in Zukunft das Verzeichis "D:\Services" ausliest du für jeden Wert die 3 SC-Befehle ausführt.


Grüße,
Dani
Mitglied: 84075
84075 Jul 08, 2010 at 13:52:54 (UTC)
Goto Top
genau so wa habe ich gewolltface-smile))))))))
Mitglied: 77559
77559 Jul 08, 2010 at 14:12:54 (UTC)
Goto Top
Das ist ja noch immer nicht automatisch,
aber wenn es mit möglichst wenig Eingaben auskommen soll - hier eine Version mit numeriertem Menu,
jetzt brauchst du nur noch eine Nr eingben und Enter drücken:
@echo off & SetLocal
Pushd D:\Service
Set Service="*"  
Dir /B/AD %Service% |find /V /N ""|more  
:loop
set "Num="  
set /P Num=Nummer des Service zum Starten :
if not defined Num Popd&goto :eof
for /f "tokens=1,* delims=" %%A in (  
  'Dir /B/AD %Service% ^|find /V /N ""^|find "[%Num%]"'  
    ) do Call :StartService %%~nxB
Goto :loop
:StartService
For %%A in ( 01 02 03 ) Do sc.exe \\server%%A start %1

Edit Pfade und Dir angepasst.

Gruß
LotPings
Mitglied: 84075
84075 Jul 08, 2010 at 14:24:44 (UTC)
Goto Top
also wenn ich das bat benutze listet er mir alle Inhalte meiner Verzeichnisse auf die unter D:\Test\Service liegen?!?!
Mitglied: 77559
77559 Jul 08, 2010 at 14:40:49 (UTC)
Goto Top
Pfade müsstest du eigentlich selber anpassen können face-wink

Gruß
LotPings
Mitglied: 84075
84075 Jul 08, 2010 at 14:46:52 (UTC)
Goto Top
oopps war ein tippfehlerface-smile cool hat geklappt...

nun habe ich nen sync skript der mir dieses Verzeichnis auf beiden servern syncen soll....?!?!?!

@echo off & setlocal
dir E:\services /b /AD
SET /p servicename=Bitte geben Sie den Service an der synchronisiert werden soll:
dir E:\services /S /AD | find /i "%servicename%"&& goto start  
goto error
:start

xcopy \\server02\E$\services "%servicename%" /D /s  
xcopy \\sserver03\E$\services "%servicename%" /D /s  
PAUSE
Mitglied: 60730
60730 Jul 08, 2010 at 15:58:58 (UTC)
Goto Top
Zitat von @84075:
oopps war ein tippfehlerface-smile cool hat geklappt...

nun habe ich nen sync skript der mir dieses Verzeichnis auf beiden servern syncen soll....?!?!?!

Hmmm...

wie war das noch beim copy Befehl?
befehl quelle ziel oder so?

Und warum sieht deine Zeile dann ganz andreas aus?
Mitglied: 84075
84075 Jul 09, 2010 at 07:49:20 (UTC)
Goto Top
sorry sorryface-smile))))) so nun tut´sface-smile)

@echo off & setlocal

echo dienste:
dir E:\services /b /AD
SET /p servicename=Bitte geben Sie den Service an der synchronisiert werden soll:
dir E:\services /S /AD | find /i "%servicename%"&& goto start  
goto error
:start

xcopy E:\services\"%servicename%"  \\server02\E$\services\"%servicename%" /D /s  
xcopy E:\services\"%servicename%"  \\server03\E$\services\"%servicename%"  /D /s  
PAUSE