Script Batch

di il
7 risposte

Script Batch

Buongiorno a tutti, 

ho un problema con un file batch che mi esegue il comando ping per testare la connessione a delle periferiche.

Il file esegue il comando ping e genera un file di log. Se il ping viene eseguito correttamente oppure ritorna richiesta scaduta, funziona tutto correttamente; il problema è se come output ho Host di destinazione non raggiungibile, nel file di log mi scrive che il ping è stato completato con successo anzichè scrivere che non è stato copletato. Dove sbaglio?

Grazie per l'aiuto

Di seguito lo script:

@echo off
SET pinglog=pinglog
SET Machine1=10.11.101.2
SET Machine2=10.11.1.215
::SET Machine3=10.11.101.16
::SET Machine4=10.11.1.169
::SET Machine5=10.11.1.215
ping %Machine1% -n 2 
if %errorlevel% == 1 (
ECHO. >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
 ECHO %date% %time%                                             >>%pinglog%.txt
 ECHO Ping NON Completato su %Machine1%                         >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
ECHO. >>%pinglog%.txt
    )
if %errorlevel% == 0 (
ECHO. >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
 ECHO %date% %time%                                             >>%pinglog%.txt
 ECHO Ping Completato con Successo su %Machine1%                >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
ECHO. >>%pinglog%.txt
)
ping %Machine2% -n 2 
if %errorlevel% == 1 (
ECHO. >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
 ECHO %date% %time%                                             >>%pinglog%.txt
 ECHO Ping NON Completato su %Machine2%                         >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
ECHO. >>%pinglog%.txt
    )
if %errorlevel% == 0 (
ECHO. >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
 ECHO %date% %time%                                             >>%pinglog%.txt
 ECHO Ping Completato con Successo su %Machine2%                >>%pinglog%.txt
 ECHO ========================================================= >>%pinglog%.txt
ECHO. >>%pinglog%.txt
)

pause

7 Risposte

  • Re: Script Batch

    In quale caso ottieni “Host di destinazione non raggiungibile” ?  Dando un IP inesistente a me viene restituito “richiesta scaduta” , io comunque ho errorlevel = 0 solo se il ping riesce

  • Re: Script Batch

    11/04/2024 - GRZ ha scritto:


    In quale caso ottieni “Host di destinazione non raggiungibile” ?  Dando un IP inesistente a me viene restituito “richiesta scaduta” , io comunque ho errorlevel = 0 solo se il ping riesce

    Ottengo host di destinazione non raggiungibile se pingo un indirizzo di rete es. di una stampante che è spenta, mentre richiesta scaduta se pingo un indirizzo estraneo alla mia rete

  • Re: Script Batch

    E se spegni il router?

  • Re: Script Batch

    11/04/2024 - sihsandrea ha scritto:


    E se spegni il router?

    Non posso spegnerlo, gli indirizzi che devo pingare sono su un'altra rete

  • Re: Script Batch

    Allora ti faccio un'altra domanda.

    Se alla rete si aggiunge un pc, viene registrato da ogni pc in rete o dal router?

  • Re: Script Batch

    Allora io farei così: per capire se il ping è andato a buon fine uso find con l'output di ping e cerco la stringa TTL che a quanto ho visto compare solo se c'è una risposta dell'host e poi controllo il codice di uscita di find

    Poi siccome non mi piaciono le ripetizioni ho inserito gli host in una variabile e poi ciclo su quella.
    Siccome nel ciclo for le variabili verrebbero espanse preventivamente, ho impostato setlocal EnableDelayedExpansion per poi utilizzare la sintassi !errorlevel!

    @echo off
    setlocal EnableDelayedExpansion
    
    SET pinglog=pinglog
    SET machines=10.11.101.2, 10.11.1.215
    ::SET machines=%machines%, 10.11.101.16, 10.11.1.169, 10.11.1.215
    
    ::del %pinglog%.txt >nul 2>nul
    
    for %%m in (%machines%) do (
    
       echo. >>%pinglog%.txt
       echo ========================================================= >>%pinglog%.txt
       echo %date% %time% >>%pinglog%.txt
        
        ping %%m -n 2 | find "TTL" >nul
        
        if "!errorlevel!" == "0" (
            echo Ping Completato con Successo su %%m >>%pinglog%.txt
    
        ) else (
        
           echo Ping NON Completato su %%m >>%pinglog%.txt
        )
        
       echo ========================================================= >>%pinglog%.txt
       echo. >>%pinglog%.txt
    )
  • Re: Script Batch

    Grazie mille, così è perfetto. TOP 

Devi accedere o registrarti per scrivere nel forum
7 risposte