invisan
Goto Top

Ping gibt errorlevel 0 zurück obwohl nicht erfolgreich

Hallo zusammen,

ich habe mal wieder ein kleines Problem.
Ich habe mir eine kleine Bat geschrieben die Rechner im Netzwerk aufgrund einer Liste anpingen und sollte der Ping erfolgreich sein
den RemoteRegistry Dienst starten und eine Abfrage an den Client richten soll.

Dies funktioniert auch solange alle Clients an sind. Ist jetzt aber einer der Clients nicht an bleibt das Skript stehen warum auch immer...


Hier der Code


@echo off & setlocal
for /F "tokens=1* delims=:" %%a in ('findstr /n "^" "D:\liste.txt"') do (  
    ping -n 1 %%b > find.txt
    echo %ERRORLEVEL%
    find "TTL=" find.txt > nul  
    echo %ERRORLEVEL%
    if %ERRORLEVEL% EQU 1 goto next

    sc \\%%b start RemoteRegistry
    >>D:\test.txt echo .
    >>D:\test.txt echo                           %%b
    >>D:\test.txt echo .
    >>D:\test.txt echo .
    >>D:\test.txt echo ========2008===========
    >"%temp%\Prod.txt" reg query "\\%%b\HKLM\SOFTWARE\Autodesk\AutoCAD LT\R13\ACADLT-6001:407" /v SerialNumber  
    >>"%temp%\Prod.txt" echo ===========================================================  
    >>D:\test.txt echo .
    >>D:\test.txt type "%temp%\Prod.txt"  
    sc \\%%b stop RemoteRegistry
    >>D:\test.txt echo(
    
    :next
    set /a L=%%a
)


Das interessante dabei ist. Wenn ich den find Befehl in einer cmd ausführe mit dem Wissen er findet nichts in der TXT gibt er mir korrekt errorlevel 1 zurück.
Mit dem Skript bleibt er immer bei errorlevel 0...

Content-Key: 228806

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

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: bastla
Lösung bastla 05.02.2014 aktualisiert um 15:10:02 Uhr
Goto Top
Hallo Invisan!

Verwende einfach die Abfrage auf "TTL" (hast Du ja ohnehin schon in Deinem Batch) - etwa so:
ping -n 1 %%b|find "TTL">nul||goto :next
Grüße
bastla
Mitglied: Invisan
Invisan 05.02.2014 um 14:07:23 Uhr
Goto Top
Zitat von @bastla:

Hallo Invisan!

Verwende einfach die Abfrage auf "TTL" (hast Du ja ohnehin schon in Deinem Batch) - etwa so:
ping -n 1 %%b|find "TTL">nul||goto :next
> 
Grüße
bastla


Hi bastla,

danke für deine wie immer super schnelle Antwort.

Leider funktioniert es aber immer noch nicht richtig. Irgendwo anders muss noch ein fehler sein.
Das Skript läuft leider nachdem der erste Rechner nicht mehr Pingbar ist in den Exit und beendet sich.

Der derzeitig Aufbau sieht so aus.


@echo off & setlocal
for /F "tokens=1* delims=:" %%a in ('findstr /n "^" "D:\liste.txt"') do (  
    :start
    ping -n 1 %%b|find "TTL">nul||goto :next  
    echo %ERRORLEVEL%

    sc \\%%b start RemoteRegistry
    >>D:\test.txt echo .
    >>D:\test.txt echo                           %%b
    >>D:\test.txt echo .
    >>D:\test.txt echo .
    >>D:\test.txt echo ========2008===========
    >"%temp%\Prod.txt" reg query "\\%%b\HKLM\SOFTWARE\Autodesk\AutoCAD LT\R13\ACADLT-6001:407" /v SerialNumber  
    >>"%temp%\Prod.txt" echo ===========================================================  
    >>D:\test.txt echo .
    >>D:\test.txt type "%temp%\Prod.txt"  
    sc \\%%b stop RemoteRegistry
    >>D:\test.txt echo(
    
    
    :next
    set /a L=%%a
    goto start
)

Ich habe daher nocheinmal :start und goto start hinzugefügt

Er geht zwar zurück zu start gibt mir dann aber zurück Fehlender Opperand.


Mit freundlichen Grüßen,

Invisan
Mitglied: Endoro
Lösung Endoro 05.02.2014 aktualisiert um 15:10:05 Uhr
Goto Top
Hey,

innerhalb eines Code Blocks kann auf veränderte %variable% nicht zugegriffen werden. In diesen Fällen benötigst du delayed expansion und !variable!, also !ERRORLEVEL! statt %ERRORLEVEL%.
Gruss.
Mitglied: Invisan
Invisan 05.02.2014 um 15:09:40 Uhr
Goto Top
Zitat von @Endoro:

Hey,

innerhalb eines Code Blocks kann auf veränderte %variable% nicht zugegriffen werden. In diesen Fällen benötigst
du delayed expansion und !variable!, also !ERRORLEVEL! statt %ERRORLEVEL%.
Gruss.

Super danke dir Endoro damit klappt es face-smile