Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Suche Batch-Programm-Code

Frage Entwicklung Batch & Shell

Mitglied: 21258

21258 (Level 1)

06.12.2005, aktualisiert 08.12.2005, 9867 Aufrufe, 20 Kommentare

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
Mitglied: ketchup
06.12.2005 um 13:39 Uhr
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.
Bitte warten ..
Mitglied: 21258
06.12.2005 um 14:08 Uhr
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
Bitte warten ..
Mitglied: Biber
06.12.2005 um 14:41 Uhr
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
Bitte warten ..
Mitglied: 21258
06.12.2005 um 15:12 Uhr
Hi,

ok, etwas wirr bei mir

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...
Bitte warten ..
Mitglied: Biber
06.12.2005 um 15:40 Uhr
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
Bitte warten ..
Mitglied: 21258
06.12.2005 um 16:13 Uhr
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
Bitte warten ..
Mitglied: Biber
06.12.2005 um 16:35 Uhr
... 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
Bitte warten ..
Mitglied: 21258
06.12.2005 um 17:46 Uhr
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...
Bitte warten ..
Mitglied: Biber
06.12.2005 um 18:43 Uhr
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")
Bitte warten ..
Mitglied: 21258
06.12.2005 um 19:07 Uhr
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
Bitte warten ..
Mitglied: Biber
06.12.2005 um 19:45 Uhr
... 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
Bitte warten ..
Mitglied: 21258
06.12.2005 um 20:07 Uhr
Ok, der Code jetzt

@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"
:


::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 :-?
Bitte warten ..
Mitglied: Biber
06.12.2005 um 20:20 Uhr
*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*
Bitte warten ..
Mitglied: 21258
06.12.2005 um 21:14 Uhr
Oh, das hätte ich dazuschreiben sollen, ... ist

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

Sry *kleinmach*
Bitte warten ..
Mitglied: Biber
06.12.2005 um 21:33 Uhr
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
Bitte warten ..
Mitglied: 21258
06.12.2005 um 21:49 Uhr
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"
:


::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
Bitte warten ..
Mitglied: Biber
08.12.2005 um 10:28 Uhr
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
Bitte warten ..
Mitglied: 21258
08.12.2005 um 14:08 Uhr
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
Bitte warten ..
Mitglied: Biber
08.12.2005 um 14:23 Uhr
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
Bitte warten ..
Mitglied: 21258
08.12.2005 um 14:41 Uhr
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 ;)
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows Tools
Suche Batch Scheduler (.bat .cmd .exe) (8)

Frage von hf1965 zum Thema Windows Tools ...

Video & Streaming
gelöst Suche nach Programm um mehrere MP4 Files zu einer zu kombinieren (8)

Frage von Stefan007 zum Thema Video & Streaming ...

Grafik
gelöst Suche Programm um Bilder zu verkleinern (10)

Frage von fox14ch zum Thema Grafik ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...