21258
Goto Top

Suche Batch-Programm-Code

Hi,

ich suche einen Programm-Code für ein Batch-Programm, der folgendes kann:

Wenn drei Registrierschlüssel existieren, dann soll das Programm nichts machen, falls nicht, soll das Programm vpn.exe aufgerufen werden.
Geht es, dass der User nicht bemerkt, dass das Programm sich startet und beendet?

Ich kann leider selbst keine Batch-Dateien programmieren...

Vielen Dank

Stephan

Content-Key: 21057

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

Printed on: April 19, 2024 at 03:04 o'clock

Member: ketchup
ketchup Dec 06, 2005 at 12:39:01 (UTC)
Goto Top
hi!

hab im moment nicht die zeit dazu das ganze richtig fertig zu tippeln.

aber im grunde genommen würd ichs so machen:
reg.exe => bei WinXP inkludiert

@echo off
reg query REGKEY1
if %ERRORLEVEL% 1 set REGKEY1_NOT=1
reg query REGKEY2
if %ERRORLEVEL% 1 set REGKEY2_NOT=1
reg query REGKEY3
if %ERRORLEVEL% 1 set REGKEY3_NOT=1
if %REGKEY1_NOT% EQU 1 and %REGKEY2_NOT% EQU 1 AND %REGKEY3_NOT% EQU 1 vpx.exe


du kannst das script beim logon aufrufen lassen oder vie scheduled task .... je nachdem sieht der user das window oder nicht.

hoffe ich hab dir geholfen.
j.
Mitglied: 21258
21258 Dec 06, 2005 at 13:08:18 (UTC)
Goto Top
Hi,

oke, den Sinn verstehe ich... Geht das auch für 98? Ich habe etwas gelesen, dass es da nicht läuft, weil die reg.exe noch nicht vorhanden ist...

Ganz verstecken kann man das nicht? Schade...

Danke nochmal und schonmal ;)

STEPHAN
Member: Biber
Biber Dec 06, 2005 at 13:41:23 (UTC)
Goto Top
Moin Stephan,

kannst Du nochmal die Anforderungen durchsortieren bitte:
-dieser Batch soll bei verschiedenen Usern laufen, die
?? alle in einer Domöne/einer AD-Struktur sind?
?? oder auch Standalone/W98-Rechner?

Selbstveständlich lässt sich so ein LogonSkript auch "unsichtbar" gestalten, aber es wäre schon hilfreich zu wissen, ob es überhaupt LoginSkripte/Logins gibt oder ob das auch auf einem W98-Rechner funktionieren soll, der gar keine Benutzeranmeldung kennt.

Jürgens Skizze funktioniert genauso gut mit RegEdit - wenn Du Reg.exe nicht standardmäßig voraussetzen kannst.

Grüße Biber
Mitglied: 21258
21258 Dec 06, 2005 at 14:12:02 (UTC)
Goto Top
Hi,

ok, etwas wirr bei mir face-smile

Folgendes Problem: Ich möchte eine Batch-Datei, die wird automatisch gestartet, wenn ich eine CD einlege. Die soll nun überprüfen, ob 2 Registrierschlüssel gesetzt sind. Wenn ja, dann soll es die Datei (auch auf der CD im gleichen Verzeichnis) vpn.exe starten. Wenn nein, dann soll es nichts machen und sich selbst beenden. Am besten das ganze unsichtbar...

Danke schon mal

STEPHAN

PS: entschuldigt meine Wirre heute...
Member: Biber
Biber Dec 06, 2005 at 14:40:21 (UTC)
Goto Top
So, Stephan,

dann die nächsten Schritte:
Einen Batch unsichtbar laufen lassen geht z.B. so ohne Dritt-Utilities:

'---Snipp RunABatMinimized.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("\stephan\irgendein.bat", 0, True)
Set WshShell = Nothing
'---Snapp RunABatMinimized.vbs
~~~~~~~~
Aber Freeware-Utilities für den Zweck gibt es auch reichlich.

Wie mit RegEdit und FOR/Find bestimmte Werte aus der Registry auslesen werden können, steht z.B. im Bereich Batch & Shell in den neueren Tutorials.

Melde Dich einfach, wenn es jetzt noch irgendwo hakt - und dann möglichst mit den konkreten RegKeys, deren Existenz Du prüfst.

So far
Biber
Mitglied: 21258
21258 Dec 06, 2005 at 15:13:13 (UTC)
Goto Top
Hi,

die Registry-Keys kenne ich noch gar nicht, ich habe jetzt Dein Beispiel von der tutorialliste gesehen. Da benutzt Du eine temp.reg, die kann doch aber auf CD nicht erstellt werden, oder?
Außerdem schaffe ich es nicht, mit

::Jetzt steht der Wert in "Zielvariable"

If Zielvariable = "" Then
echo "leer"
End If

leer auszugeben, wenn der Key nicht existiert... Das ist irgendwie sehr kompliziert habe ich den Eindruck...

Danke nochmal, entschuldige mein Unverständnis.

ein sehr verwirrter - Stephan
Member: Biber
Biber Dec 06, 2005 at 15:35:59 (UTC)
Goto Top
... keine überhasteten Bewegungen.. immer ruhig an die Sache rangehen.

1) Auf CD erstellen kannst Du nichts. Richtig. Deshalb schreibe nach möglichkeit diese *.reg-Dateien immer in das %temp%-Verzeichnis - das existiert erstens immer und zweitens jeder Benutzer/jedes Programm Schreibrechte.

2) Die Prüfung auf "leere"/nicht gesetzte Variablen im Batch ist geringfügig anders.
...
IF [%var%]== echo Variable var ist leer
IF NOT [%var%]== echo Variable var ist gesetzt mit Wert %var%

Wichtig ist das "Einklammern" der Variablen, weil es sonst einen Syntaxfehler gibt
( die Zeile 'IF %var%==""' würde aufgelöst zu 'IF ==""' ) und das "==" statt "=" beim Vergleich.
Du könntest also prüfen:
If "%Zielvariable%" == "" echo leer ........oder
If [%Zielvariable%] == echo leer .........oder
If xx%Zielvariable%xx == xxxx echo leer ........etc.

Ein "Then" und ein "End If"gibt es nicht im Batch. Siehe Hilfe unter "IF /?"

Nachfrage: Wieso kennst Du die RegKeys nicht, die Du prüfst? *grübel*
Biber
Mitglied: 21258
21258 Dec 06, 2005 at 16:46:17 (UTC)
Goto Top
Hi,

oke, habe jetzt das:

@echo off

:: Für den Fall, dass es sie schon gibt
del [%temp%]\temp.reg


:: Und nun das Auslesen.
:: Zuerst Exportieren
regedit /e [%temp%]\temp.reg "HKEY_CLASSES_ROOT\test\testschluessel"
:: Die Zeile mit dem Wert herausholen
for /f "eol=[ skip=2 tokens=1* delims==" %i in ('type temp.reg') do (
if %i=="MeinWertname" set Zielvariable=%j
)

del [%temp%]\temp.reg

::Jetzt steht der Wert in "Zielvariable"

If [%Zielvariable%] == echo leer
If Not [%Zielvariable%] == start vpn.exe

Das ist doch schonmal gut oder?
Eigentlich dürfte er doch jetzt das Programm starten, denn testschluessel besteht, da steht 1 drin...

Aber er macht es nicht :-?

Eigentlich ist es richtig oder?

Danke schon mal
STEPHAN

PS: Ich kenne den Pfad der Schlüssel noch nicht, weil ich noch nicht genau mir überlegt habe, wo ich sie anlege...
Member: Biber
Biber Dec 06, 2005 at 17:43:18 (UTC)
Goto Top
Na, hab ich mir doch gleich gedacht, dass Du schwindelst..

Ich kann leider selbst keine Batch-Dateien programmieren...

Noch ein paar handwerkliche Kinken raus, dann passt das..

@echo off
:: Für den Fall, dass es sie schon gibt
:: ~~ ich würde die in eine Variable packen - einfacher zu lesen und weniger Tippfehlergefahr
set "tempreg=%temp%\temp.reg"
IF exist %tempreg% del %tempreg%

:: Und nun das Auslesen.
:: Zuerst Exportieren
regedit /e %tempreg% "HKEY_CLASSES_ROOT\test\testschluessel"
:: Die Zeile mit dem Wert herausholen
:: jepp, aber Zählvariablen im Batch immer mit zwei Prozentzeichen
for /f "eol=[ skip=2 tokens=1* delims==" %%$i in ('type %tempreg%') do (
if %%i=="MeinWertname" set "Zielvariable=%%j"
)

del %tempreg%
::Jetzt steht der Wert in "Zielvariable"
If [%Zielvariable%] == echo leer
If Not [%Zielvariable%] == start vpn.exe

also, im Prinzip sieht das doch gut aus... muss sicherlich noch mal am konkreten Reg-Schlüssel getestet werden, aber die Richtung stimmt.
Das merkwürdige "eol=[" ... das habe ich auch schon mehrfach in der FOR..IN..DO-Hilfe bewundert.. ich habe kein Beispiel, wo dieser Parameter irgenetwas Sinnvolles tut. Kannst Du auch weglassen. Das untersuche ich mal an einem Regentag...

Du solltest bloß darauf achten, dass Du keine Batch-Befehle verwendest, die es eventuell unter Win98 noch nicht gibt. Der FOR-Befehl ist ziemlich erweitert worden.
Wenn Du nur die Existenz von bestimmten RegKeys prüfen willst: von Win98 bis hin zu den neuesten Win-Versionen funktioniert folgende Mimik:
1. Mit RegEdit den/die Schlüssel auslesen in eine %TempReg%-Datei wie oben.
2. find "meinSchlüssel" %tempReg% ........Errorlevel 1= nicht gefunden/Errorlevel 0=gefunden
if errorlevel 1 start vpn.exe

...(hier Anweisungen für "meinSchlüssel-wurde-gefunden")
Mitglied: 21258
21258 Dec 06, 2005 at 18:07:45 (UTC)
Goto Top
Oke, vielen Dank :D

Habe es jetzt so:


@echo off
:: Für den Fall, dass es sie schon gibt
:: ~~ ich würde die in eine Variable packen - einfacher zu lesen und weniger Tippfehlergefahr
set "tempreg=%temp%\temp.reg"
IF exist %tempreg% del %tempreg%

:: Und nun das Auslesen.
:: Zuerst Exportieren
regedit /e %tempreg% "HKEY_CLASSES_ROOT\test\testschluessel"
:: Die Zeile mit dem Wert herausholen
:: jepp, aber Zählvariablen im Batch immer mit zwei Prozentzeichen
for /f "eol=[ skip=2 tokens=1* delims==" %%$i in ('type %tempreg%') do (
if %%i=="MeinWertname" set "Zielvariable=%%j"
)

del %tempreg%
::Jetzt steht der Wert in "Zielvariable"
find "HKEY_CLASSES_ROOT\test\testschluessel" %tempReg%
:: %tempReg% starten, falls der Schlüssel nicht existiert, nur um Inhalt zu prüfen
if errorlevel 1 start %tempReg%
:: Sonst vpn.exe starten
if errorlevel 0 start vpn.exe


Aber er startet es mir triotzdem nicht, der Schlüssel ist vorhanden...
Komisch, oder?

Danke nochmal, Stephan
Member: Biber
Biber Dec 06, 2005 at 18:45:28 (UTC)
Goto Top
... also, Stephan,
teste es doch am CMD-Prompt.
Wenn die *reg-Datei da ist, ist der Rest lösbar.
Die FOR..IN..DO..-Zeile brauchst Du ja gar nicht mehr as far I see.. da ist noch ein $-Zeichen zuviel drin (peinlich, da hatte ich zu breite Finger vorhin... nur "%%i" wäre besser)

So.. und gegen Ende des Batches:

Wenn NICHT gefunden, also die Schlüssel nicht existieren, soll VPN gestartet werden:
find....(blah wie oben)
if errorlevel 1 start vpn.exe (eventuell noch Pfadangabe vorweg?)

Mach doch erstmal statt einem "start... *.exe" nur ein "Echo hier rufe ich vpn auf", bis es läuft bzw. bis nach dem Testen.
Bekommst Du schon hin
Biber
Mitglied: 21258
21258 Dec 06, 2005 at 19:07:25 (UTC)
Goto Top
Ok, der Code jetzt face-smile

@echo off
:: Für den Fall, dass es sie schon gibt
:: ~~ ich würde die in eine Variable packen - einfacher zu lesen und weniger Tippfehlergefahr
set "tempreg=%temp%\temp.reg"
IF exist %tempreg% del %tempreg%

:: Und nun das Auslesen.
:: Zuerst E-öxportieren
regedit /e %tempreg% "HKEY_CLASSES_ROOT\test\testschluessel"
:: Die Zeile mit dem Wert herausholen
:: jepp, aber Zählvariablen im Batch immer mit zwei Prozentzeichen
::for /f "eol=[ skip=2 tokens=1* delims==" %%$i in ('type %tempreg%') do (
::if %%i=="MeinWertname" set "Zielvariable=%%j"
:face-smile


::Jetzt steht der Wert in "Zielvariable"
find "HKEY_CLASSES_ROOT\test\testschluessel" %tempreg%
if errorlevel 1 echo nichts
if errorlevel 0 echo vpn exe aufrufen

del %tempreg%


Fehlermeldung:
Datei ...\temp.tmp nicht gefunden.
nichts
vpn exe aufrufen

Jetzt versteh ich echt nichts mehr... Ich habe auch shcon del %tempreg% verschoben und habe versucht, es auszukommentieren, nichts :-?
Member: Biber
Biber Dec 06, 2005 at 19:20:12 (UTC)
Goto Top
*mitKopfkratz*
Auf was zeigt denn bei Dir die Variable %temp%?

Gib mal bitte am CMD-Prompt ein "set temp" ein.

Falls da ein Pfad mit Leerzeichen kommen sollte "c:\Dokumente und Einstellungen..." oder so, dann bitte überall das %tempreg% in Anführungszeichen setzen außer in der ersten Zeile.
Wo oder wer da jetzt "..\temp.tmp" hervorzaubern... *staun*
Mitglied: 21258
21258 Dec 06, 2005 at 20:14:21 (UTC)
Goto Top
Oh, das hätte ich dazuschreiben sollen, ... ist

C.\Dokume~1\ADMINI~1\LOKALE~1\Temp

Sry *kleinmach*
Member: Biber
Biber Dec 06, 2005 at 20:33:05 (UTC)
Goto Top
So, testen hilft ja manchmal..
hier noch zwei kleine Fehler:

1) beim Suchen - die *.reg-datei ist natürlich so aufgebaut, dass sie nicht den String
"HKEY_CLASSES_ROOT\test\testschlüssel" in einer zeile enthält.
Solltest also a) nur den Zweig "HKEY_CLASSES_ROOT\test" per RegEdit exportieren
und b) als Suchstring nur "testschlüssel" verwenden.

2) Am Ende nach der Zeile "IF ERRORLEVEL 1 ..." nochmal eine Zeile rein.
Sonst macht der Batch immer einen VPN-Aufruf.

if errorlevel 1 echo nichts
if errorlevel 1 goto :ende
if errorlevel 0 echo vpn exe aufrufen
:ende
3) grad noch gesehen: die allerletzte Zeile - da komt die Fehlermeldung her. wenn gar keine %Tempreg% erzeugt wurde (Schlüssel/Zweig existiert nicht, dann kann die natürlich auch nicht gelöscht werden.
Also auch hier:
IF exist %tempreg% del %tempreg%

So, ich mach Feierabend für heute.
Grüße Biber
Mitglied: 21258
21258 Dec 06, 2005 at 20:49:18 (UTC)
Goto Top
Ok,

erstmal vielen Dank für heute :D

Es geht aber leider immer noch nicht, und mittlerweile blicke ich gar nicht mehr durch. So sieht der Code aus:

@echo off
:: Für den Fall, dass es sie schon gibt
:: ~~ ich würde die in eine Variable packen - einfacher zu lesen und weniger Tippfehlergefahr
set "tempreg=%temp%\temp.reg"
IF exist %tempreg% del %tempreg%

:: Und nun das Auslesen.
:: Zuerst E-öxportieren
regedit /e %tempreg% "HKEY_CLASSES_ROOT\test\testschluessel"
:: Die Zeile mit dem Wert herausholen
:: jepp, aber Zählvariablen im Batch immer mit zwei Prozentzeichen
::for /f "eol=[ skip=2 tokens=1* delims==" %%$i in ('type %tempreg%') do (
::if %%i=="MeinWertname" set "Zielvariable=%%j"
:face-smile


::Jetzt steht der Wert in "Zielvariable"
find "testschluessel" %tempreg%
if errorlevel 1 echo nichts
if errorlevel 1 goto :ende
if errorlevel 0 echo vpn exe aufrufen
:ende

IF exist %tempreg% del %tempreg%

Und er sagt, obwohl der Eintrag besteht, dass er die temp nicht finden kann.

Warum?? :-?

Danke schon und nochmal STEPHAN
Member: Biber
Biber Dec 08, 2005 at 09:28:01 (UTC)
Goto Top
Moin StephanL,

damit wir hier endlich mal die Kuh vom Eis kriegen, poste doch bitte mal diese paar relevanten Zeilen einer "richtigen" *.reg-Datei mit dem/den Schlüssel(n), die vorhanden sein sollen.

Damit wir hier irgendwann mal fertig werden...
Thx Biber
Mitglied: 21258
21258 Dec 08, 2005 at 13:08:24 (UTC)
Goto Top
Hi,

ich habs vor ner Stunde oder so hinbekommen :D *freu*

testschluessel ist der Schlüssel, ich darf aber nur bis zum \ eingeben. Dann speichert er den gesamten Baum unterhalb HKEY_CLASSES_ROOT\test\ in eine *.reg-Datei. Jetzt kann ich dann in dieser *.reg-Datei nach testschluessel suchen :D

Danke für deine Hilfe, jetzt gehts wirklich!

Stephan
Member: Biber
Biber Dec 08, 2005 at 13:23:54 (UTC)
Goto Top
Gottseidank und Glückwunsch, StephanL,

ich hasse nämlich Threads, die zum Wochenende immer noch offen sind.
Verleitet mich immer wieder zum Surfen... statt einen entspannenden Bummel durch die weihnachtlich dekorierten Bremer Schuhgeschäfte zu machen, wie es der Rest der Familie immer wieder vorschlägt...

Grüße Biber
Mitglied: 21258
21258 Dec 08, 2005 at 13:41:54 (UTC)
Goto Top
Dann wünsch ich Dir auf jeden Fall viel Spaß beim Bummeln durch die Schuhgeschäfte. Wobei mir eher dann doch der Weihnachtsmarkt zusagen würde ;)