Top-Themen

Aktuelle Themen (A bis Z)

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 Wieso funktioniert das goto nicht?

Mitglied: 52634

52634 (Level 1)

22.09.2007, aktualisiert 24.09.2007, 4751 Aufrufe, 10 Kommentare

Hallo...

Ich habe eine batch in der überprüft wird ob ein Rechner existiert, die Abfrage funktioniert aber das springen zur benötigten Funktion wird ignoriert und alles abgearbeitet... Hoffe ihr könntt mir helfen^^.

Hier die Batch:
01.
@echo OFF 
02.
echo Ueberpruefen ob Netzrechner vorhanden sind! 
03.
ping 192.168.2.33 -n 1 >> "%tmp%\nlw1.txt" 
04.
ping 192.168.2.30 -n 1 >> "%tmp%\nlw2.txt" 
05.
ping 192.168.2.34 -n 1 >> "%tmp%\nlw3.txt" 
06.
goto :nlw1suchen:  
07.
 
08.
:nlw1suchen: 
09.
find /I "Antwort von 192.168.2.33" "%tmp%\nlw1.txt" 
10.
IF   %ERRORLEVEL% == 1 goto :nlw1: 
11.
IF   %ERRORLEVEL% == 0 goto :nlw2suchen: 
12.
 
13.
:nlw1: 
14.
echo Netzlaufwerke-Server werden hinzugefuegt. 
15.
net use z: \\192.168.2.33\A /user:geheim_;-) geheim_;-) /PERSISTENT:NO  
16.
net use y: \\192.168.2.33\E /user:geheim_;-) geheim_;-) /PERSISTENT:NO  
17.
net use x: \\192.168.2.33\C$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
18.
del "%tmp%nlw1.txt" 
19.
goto :nlw2suchen: 
20.
 
21.
:nlw2suchen: 
22.
find /I "Antwort von 192.168.2.30" "%tmp%\nlw2.txt" 
23.
IF   %ERRORLEVEL% == 1 goto :nlw2: 
24.
IF   %ERRORLEVEL% == 0 goto :nlw3suchen: 
25.
 
26.
:nlw2: 
27.
echo Netzlaufwerke-Dad werden hinzugefuegt. 
28.
net use i: \\192.168.2.30\C$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
29.
net use m: \\192.168.2.30\D$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
30.
del "%tmp%\nlw2.txt" 
31.
goto :nlw3suchen: 
32.
 
33.
:nlw3suchen: 
34.
find /I "Antwort von 192.168.2.34" "%tmp%\nlw3.txt" 
35.
IF   %ERRORLEVEL% == 1 goto :nlw3: 
36.
IF   %ERRORLEVEL% == 0 goto :nwdsuchen: 
37.
 
38.
:nlw3: 
39.
echo Netzlaufwerke-Desktop werden hinzugefuegt. 
40.
net use n: \\192.168.2.34\C$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
41.
net use o: \\192.168.2.34\A$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
42.
net use p: \\192.168.2.34\F$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
43.
del "%tmp%\nlw3.txt" 
44.
goto :nwdsuchen: 
45.
 
46.
:nwdsuchen: 
47.
echo Netzwerkdrucker werden hinzugefuegt. 
48.
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" >> "%tmp%\nwd.txt" 
49.
find /I "\\192.168.2.33\HP-Drucker" "%tmp%\nwd.txt" 
50.
IF   %ERRORLEVEL% == 1 rundll32 printui.dll,PrintUIEntry /in /n "\\192.168.2.33\HP-Drucker" goto :nwd: 
51.
 
52.
:nwd: 
53.
rundll32 printui.dll,PrintUIEntry /y /n "\\192.168.2.33\HP-Drucker" 
54.
del "%tmp%\nwd.txt" 
55.
 
56.
echo MySQL wird gestoppt! 
57.
net stop mysql 
58.
 
59.
PAUSE
[Edit Biber 24.9.] Skript als <code> formatiert. [/Edit]
Mitglied: EvilMoe
23.09.2007 um 00:00 Uhr
Muss am ende ein doppelpunkt stehen? Ich bin zwar nicht der freak bei batches, aber ich meine mal das ich am ende nie ein doppelpunkt verwendet habe...
Bitte warten ..
Mitglied: Dynadrate
23.09.2007 um 00:07 Uhr
Ohne die Sache ausprobiert zu haben: EvilMoe hat recht!
Bitte warten ..
Mitglied: TuXHunt3R
23.09.2007 um 00:45 Uhr
Guter Platz um eine Frage zu deponieren:

Sind Ziffern und oder Sonderzeichen in Sprungmarken erlaubt? Ich habe bisher aus Sicherheit keine verwendet....
Bitte warten ..
Mitglied: screen2
23.09.2007 um 09:02 Uhr
Bei goto müssen beide Doppelpunkte weg und bei der Sprungmarke dürfen sie nur am Anfang stehen.
Doch noch eine Frage von mir sry hoffe es passt jetzt hier, was bewirkt die Option Persistent: NO bei der Funktion net use in deinem Script und was heißt %ERRORLEVEL% ==0.

screen2
Bitte warten ..
Mitglied: 52634
23.09.2007 um 12:34 Uhr
Das /Persistent:NO bedeutet das die Netzlaufwerke nur bis zur Abmeldung bestehen und dann jedesmal bei der Anmeldung neu verbunden werden. Das mit dem Errorlevel == 0, wenn in "find" was nichts findet gibt es eine 0 aus, hoffe hab das gut erklärt , den teil hab ich nämlich mit Hilfe eines Lehrers gemacht. Ich hab das jetzt so abgeänder mit den Sprungmarken und dem goto aber die Batch führt sie immer noch aus..? hmmm
Bitte warten ..
Mitglied: bastla
23.09.2007 um 14:16 Uhr
@screen2

Bei goto müssen beide Doppelpunkte weg und bei der Sprungmarke dürfen sie nur am Anfang stehen.
kann man so nicht stehen lassen - ich würde das eher so formulieren:

Bei goto können beide Doppelpunkte weg (oder jeder einzelne der beiden) und bei der Sprungmarke muss einer am Anfang stehen (am Ende können so viele, wie in eine Batchzeile eben reinpassen, inkl etwa einem Kommentar, folgen).

Beispiel:
01.
@echo off 
02.
goto :($)1Label@§Test-0816: 
03.
echo Kein Sprung! 
04.
pause 
05.
goto :eof 
06.
 
07.
:($)1Label@§Test-0816:::::::: Mit Kommentar :::::::: 
08.
echo Angekommen ... 
09.
pause
Die Zeile "echo Kein Sprung"! ist nur zu Demo-Zwecken gedacht, da sie ohnehin nie errreicht wird (bei nicht gefundenem Sprungziel verursacht bereits die "goto"-Zeile einen Fehler).
@TuXHunt3R
Hinsichtlich der Sonderzeichen ist sicherlich etwas Vorsicht geboten, da ja im Batch zB "!%&/?+ jeweils eine eigene Bedeutung haben (können), aber, wie das Beispiel oben zeigen soll: grundsätzlich verboten sind Sonderzeichen hier nicht.

Grüße
bastla
Bitte warten ..
Mitglied: 52634
23.09.2007 um 14:24 Uhr
Was heist in dem Bsp: goto :eof?
Bitte warten ..
Mitglied: bastla
23.09.2007 um 14:27 Uhr
Hallo MGrote!

Das Problem rührt daher, dass "find" einen Errorlevel 1 dann liefert, wenn der gesuchte Text nicht gefunden wurde, daher also
01.
find /I "Antwort von 192.168.2.33" "%tmp%\nlw1.txt">nul 
02.
if errorlevel 1 goto :nlw2suchen: 
03.
echo Netzlaufwerke-Server werden hinzugefuegt.
Kürzer:
01.
find /I "Antwort von 192.168.2.33" "%tmp%\nlw1.txt">nul||goto :nlw2suchen: 
02.
echo Netzlaufwerke-Server werden hinzugefuegt.
Noch kürzer (soferne der Batch unter XP läuft - W2000 hat mit dem "ping"-Errorlevel Probleme):
01.
ping 192.168.2.33 -n 1 >nul||goto :nlw2suchen: 
02.
echo Netzlaufwerke-Server werden hinzugefuegt.
Die Verknüpfung mit || bedeutet: Bei einem Errorlevel größer als 0 (also "Befehl mit Fehler beendet") führe die folgende Anweisung aus. Analog dazu kannst Du && verwenden, um nur bei fehlerloser Beendigung des Befehles die nächste Anweisung auszuführen. Daraus ergäbe sich eine noch kürzere Schreibweise:
01.
ping 192.168.2.33 -n 1 >nul&&( 
02.
    echo Netzlaufwerke-Server werden hinzugefuegt. 
03.
    net use z: \\192.168.2.33\A /user:geheim  geheim  /PERSISTENT:NO 
04.
)
"goto :eof" bedeutet: "Batch beenden" oder, bei Verwendung in einem ge"call"ten Block: "Unterprogramm beenden - Rücksprung"

Grüße
bastla

[Edit] ">nul" zu den "ping"-Zeilen hinzugefügt - soll, so wie bei den "find"-Zeilen - die Optik etwas verbessern. [/Edit]
Bitte warten ..
Mitglied: 52634
23.09.2007 um 14:49 Uhr
Daaaaaaaaaaaaanke...
jetzt funktioniert das so wie es soll^^.
Bitte warten ..
Mitglied: Biber
24.09.2007 um 07:25 Uhr
Moin MGrote,

auch wenn der Beitrag schon als gelöst markiert ist, möchte ich noch anmerken:

01.
@echo OFF 
02.
echo Ueberpruefen ob Netzrechner vorhanden sind! 
03.
ping 192.168.2.33 -n 1 >> "%tmp%\nlw1.txt" 
04.
ping 192.168.2.30 -n 1 >> "%tmp%\nlw2.txt" 
05.
ping 192.168.2.34 -n 1 >> "%tmp%\nlw3.txt" 
06.
::###########----> Na toll, hier wird immer an evtl. bestehende nlwX.txt angefügt. 
07.
::###########---> Schau doch mal weiter unten, ob in JEDEM Fall auch die nlwX'e gelöscht werden....;-) 
08.
goto :nlw1suchen:  
09.
 
10.
:nlw1suchen: 
11.
find /I "Antwort von 192.168.2.33" "%tmp%\nlw1.txt" 
12.
IF   %ERRORLEVEL% == 1 goto :nlw1: 
13.
<b>IF   %ERRORLEVEL% == 0 goto :nlw2suchen:</b> 
14.
::########### unabhängig von der Logik (s. bastlas Hinweis):  
15.
::########### das "IF   %ERRORLEVEL% == 0 " ist ohne Sinnverlust entfernbar. Das "goto ..." reicht. 
16.
 
17.
:nlw1: 
18.
echo Netzlaufwerke-Server werden hinzugefuegt. 
19.
net use z: \\192.168.2.33\A /user:geheim_;-) geheim_;-) /PERSISTENT:NO  
20.
::######### a) Wenn doch gefühlte 27x auf "\\192.168.2.33" gemapt wird, dann sollte es in eine %variable% 
21.
::######### b) wenn doch gefühlte 27x das (ohnehin defaultwertige) "net use .../Persistent:No" dahintersteht, 
22.
::#########      dann wäre EINE Zeile "Net use /p:no" VOR dem Actionteil pflegeleichter. 
23.
net use y: \\192.168.2.33\E /user:geheim_;-) geheim_;-) /PERSISTENT:NO  
24.
net use x: \\192.168.2.33\C$ /user:geheim_;-) geheim_;-) /PERSISTENT:NO 
25.
del "%tmp%nlw1.txt" 
26.
goto :nlw2suchen: 
27.
 
28.
:nlw2suchen: 
29.
.... 
30.
:nlw2: 
31.
.... 
32.
 
33.
:nlw3suchen: 
34.
... 
35.
 
36.
:nlw3: 
37.
.... 
38.
:nwdsuchen: 
39.
echo Netzwerkdrucker werden hinzugefuegt. 
40.
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" >> "%tmp%\nwd.txt" 
41.
find /I "\\192.168.2.33\HP-Drucker" "%tmp%\nwd.txt" 
42.
IF   %ERRORLEVEL% == 1 rundll32 printui.dll,PrintUIEntry /in /n "\\192.168.2.33\HP-Drucker" goto :nwd: 
43.
::########## Um noch mal auf die Kernfrage zurückzukommen: Auch dieses GOTO kann nicht funktionieren: 
44.
::########## denn nach "RunDLL23 printUI.DLL ..... HP-Drucker" fehlt mindestens ein, beseer zwei "&" 
45.
::########## IF   %ERRORLEVEL% == 1 rundll32 printui.dll,PrintUIEntry .......\HP-Drucker" && goto :nwd: 
46.
::########## Andererseits.... er müsste ja nicht weit goto'en..... er merkt zwar einen Parameterfehler.... 
47.
::########## "'Goto :nwd:' kann ich nich' interpretieren", aber geht natürlich in die Folgezeile.  
48.
 
49.
:nwd: 
50.
rundll32 printui.dll,PrintUIEntry /y /n "\\192.168.2.33\HP-Drucker" 
51.
del "%tmp%\nwd.txt" 
52.
 
53.
echo MySQL wird gestoppt! 
54.
net stop mysql 
55.
 
56.
PAUSE
[Das soll jetzt kein korrigierter, getesteter Batch sein, sondern nur die Ur-Version mit formalen Anmerkungen.]

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Windows 7
CMD ftp funktioniert nicht aber wieso?
gelöst Frage von DomiiAUTWindows 710 Kommentare

Ich habe alles versuch und ich habe festgestellt, dass cmd das Problem ist. Sobald ich ftp eingebe und anschließend ...

Windows Server

AD Gastkonto unter Win10 funktioniert nicht, wieso?

Frage von McLionWindows Server2 Kommentare

Hallo, ich habe drei Win7 und ein Win10 PCs in einer Domäne. Das Gastkonto ist aktiviert und funktioniert unter ...

Windows Netzwerk

WOL funktioniert - geht aber auch automatisch an. wieso?

Frage von freeuser616Windows Netzwerk24 Kommentare

Hi all, ich hoffe ihr könnt mir da weiter helfen ich habe bei mir zu hause WOL soweit eingerichtet, ...

Batch & Shell

"goto" kann syntaktisch an dieser Stelle nicht verarbeitet werden

gelöst Frage von Y4nn1ckBatch & Shell14 Kommentare

Morgen, ich schreibe gerade an einem Zufallsgenerator für die Klasse, also an einem, der auswählt, wer dran kommt. Ich ...

Neue Wissensbeiträge
Exchange Server
Exchange - Fehler mit 2018-07 Sicherheitsupdate
Tipp von ArnoNymous vor 1 TagExchange Server4 Kommentare

Hallo, es gibt mal wieder Freude mit den MS-Updates. KB4338814 führt dazu, dass der Exchange keine Mails mehr zustellt. ...

Suche Projektpartner

PC Recycling Projekte mit Flüchtlingen und Kids suchen Materialspenden und Mitmacher!

Erfahrungsbericht von NettePCyclePiraten vor 1 TagSuche Projektpartner7 Kommentare

Hallöchen liebe Kollegen, ich betreue zwei PC-Gruppen im Raum Dortmund: "Ne#e PCycle Pir@ten" & "PCschr@uber Br@mbauer" Wir sind eine ...

iOS
IOS 12.2 beta und OpenVPN iPad und iPhone
Erfahrungsbericht von magicteddy vor 2 TageniOS

Moin, kleiner Hinweis an die experimentierfreudigen unter Euch: Bei der aktuellen beta gibt es ein Problem im Zusammenspiel zwischen ...

Vmware
VMware Tools 10.3 verfügbar
Information von sabines vor 2 TagenVmware

Eine Sicherheitslücke wird mit den Tools der Version 10.3 geschlossen, die Tools müssen auf jeder VM aktualisiert werden. Näheres ...

Heiß diskutierte Inhalte
Windows Netzwerk
Netzwerk einrichten - wie mache ich es richtig?
Frage von gintonikWindows Netzwerk23 Kommentare

Hallo, ich bin neu hier und erhoffe mir hier ein paar Antworten für meine Umsetzung zu erhalten. Kurz zu ...

CPU, RAM, Mainboards
4x 2 GB DDR2 1066 gesucht
gelöst Frage von Windows10GegnerCPU, RAM, Mainboards17 Kommentare

Hallo, ich plane den RAM meines Rechners aufzurüsten. Motherboard: Gigabyte X48 DS5 Der FSB steht bei 259, daher soll ...

Microsoft Office
Druckdatum nur auf ausgedrucktem Dokument anzeigen
gelöst Frage von eichi18Microsoft Office16 Kommentare

Hallo zusammen Ich versuche in einem Word Dokument das Druckdatum nur auf dem eigentlichen Ausdruck auszugeben und am Bildschirm ...

Windows Tools
ROBOCOPY - Ordner verschieben, nicht Ordnerinhalt
gelöst Frage von kilrathiWindows Tools13 Kommentare

Hallo zusammen, simple Frage aber ich bin irgendwie zu blöd um auf die Lösung zu kommen: robocopy C:\Temp\A D:\Temp ...