IALweb Homepage
Forum Home Forum Home > Software & Hardware > Software
  New Posts New Posts RSS Feed - Comando If in DOS [RISOLTO]
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

REGISTRATEVI su IALWeb forum! E' facile e veloce! Potrete consultare tutte le sezioni del forum senza restrizioni e scrivere per dare o richiedere aiuto.
Votaci in Net-Parade

Comando If in DOS [RISOLTO]

 Post Reply Post Reply
Author
Message
Cisco View Drop Down
Utente Base
Utente Base


Joined: 17/Feb/2014
Location: Varese
Status: Offline
Points: 95
Post Options Post Options   Thanks (0) Thanks(0)   Quote Cisco Quote  Post ReplyReply Direct Link To This Post Topic: Comando If in DOS [RISOLTO]
    Posted: 17/Feb/2017 at 15:38
Buongiorno a tutti, non se se posso chiesere qualcosa sul DOS ma ci provo.

Ho creato un filettino batch che contiene un ping e poi un comando dir

praticamente da una risorsa di rete ho bisogno di creare un elenco dei file in essa contenuta

Il problema è che se questa risorsa di rete non è collegata il comando dir crea il file di testo ma questo è vuoto

Io avrei la necessità di fare in modo che il comando batch si interrompa se non fa il ping

E' possibile farlo?

per ora ho risolto mettendo un comando pause fra il ping ed il dir e gli dico io manualmente se continuare o no

questo è il filettino batch che ho creato
 

ping 192.168.40.171

pause

dir \\192.168.40.171\DESIGN /a:-d /b >C:\Francesco\Elen_dis\E_T71.txt

Mi sarebbe utile che si potesse automatizzare l'operazione, è' possibile farlo?

Grazie anticipatamente a tutti



Edited by willy55 - 20/Feb/2017 at 16:30
Back to Top
willy55 View Drop Down
Moderatore
Moderatore
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 8495
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 17/Feb/2017 at 20:01

Per controllare se l'indirizzo IP è raggiungibile (attraverso il comando PING) puoi valutare il valore di ERRORLEVEL, un esempio è il seguente:


@ECHO OFF
SET "host=192.168.40.171"

PING -n 1 "%host%" | FINDSTR /r /c:"[0-9] *ms"

if %ERRORLEVEL% == 0 (
    ECHO Raggiunto indirizzo IP.
    DIR \\192.168.40.171\DESIGN /a:-d /b >C:\Francesco\Elen_dis\E_T71.txt

) else (
    ECHO Mancato collegamento ad IP.
)

dal momento che le variazioni sul tema (nel batch MS_DOS) possono essere varie, te ne indico alcune:
http://stackoverflow.com/questions/9329749/batch-errorlevel-ping-response
http://stackoverflow.com/questions/21245545/ping-test-using-bat-file-trouble-with-errorlevel
http://stackoverflow.com/questions/3050898/how-to-check-if-ping-responded-or-not-in-a-batch-file
http://stackoverflow.com/questions/25107406/how-to-ping-a-server-only-once-from-within-a-batch-file
http://superuser.com/questions/748121/batch-file-ping-errorlevel-and-null-what-do-they-do
https://social.technet.microsoft.com/Forums/scriptcenter/en-US/c0cafc24-c9be-4f67-ada0-4bb05fb26e78/explain-the-batch-script-to-ping-multiple-computers?forum=ITCG
 



Edited by willy55 - 17/Feb/2017 at 20:03
Willy
Back to Top
Cisco View Drop Down
Utente Base
Utente Base


Joined: 17/Feb/2014
Location: Varese
Status: Offline
Points: 95
Post Options Post Options   Thanks (0) Thanks(0)   Quote Cisco Quote  Post ReplyReply Direct Link To This Post Posted: 20/Feb/2017 at 11:54
Ciao, ho applicato il tuo esempio e, non che pensassi diversamente, funziona perfettamente!!!

Innanzitutto grazie

l'ho modificata così:

if %ERRORLEVEL% == 0 (
    ECHO Raggiunto indirizzo IP.
    DIR \\192.168.40.172\DESIGN /a:-d /b >C:\Francesco\Elen_dis\E_T72.txt
) else (
    ECHO Mancato collegamento ad IP.
PAUSE)

tolto l'ECHO OFF per vedere l'esecuzione dell'operazione (sembra che stia facendo chissà che cosa...)

aggiunta PAUSE perchè voglio che rimanga aperta la finestra se non si connette

Vorrei anche alcuni chairimenti per capire cosa sto facendo:

con SET "host=192.168.40.172" imposti l'espressione a cui dare un valore

con FINDSTR /r /c:"[0-9] *ms" cerca la stringa che ti dice che il ping è riuscito

con

 if %ERRORLEVEL% == 0 (
    ECHO Raggiunto indirizzo IP.
    DIR \\192.168.40.172\DESIGN /a:-d /b >C:\Francesco\Elen_dis\E_T72.txt
) else (
    ECHO Mancato collegamento ad IP.

dai i due comandi a seconda che sia o meno riuscito il ping

ma per me sono misteriosi sia
 PING -n 1 "%host%" |
che la parte == 0 (
dell'ERRORLEVEL

Puoi chiarirmeli se hai un po' di tempo, ma se non puoi va benissimo lo stesso.

Grazie mille ancora



Edited by willy55 - 20/Feb/2017 at 16:32
Back to Top
willy55 View Drop Down
Moderatore
Moderatore
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 8495
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 20/Feb/2017 at 16:33


Si vede che non hai dovuto affrontare i comandi MS-DOS  (a partire dalle prime versioni) ove, per ottenere delle automazioni, nei batch, era necessario cercare di sfruttare ciascun elemento disponibile.
Cerco, comunque, di fornirti delle semplici indicazioni che magari potrai approfondire leggendo la specifica documentazione.

Esaminiamo, quindi, nel batch la porzione:


PING -n 1 "%host%" |

ove l'ultimo carattere "|" corrispondente al carattere ASCII=124 ed indicato, anche, come carattere di "pipeline" o solo "pipe", che in MS-DOS così come in Unix (o Linux nelle sue varianti) produce una sequenza di processi concatenati del flusso standard, in modo che venga incanalata l'uscita di ciascun processo (stdout) ed alimentare direttamente come input (stdin) quello successivo.
http://digilander.libero.it/entity7/it/it_resources/msdos.htm
http://www.lagmonster.org/docs/DOS7/pipes.html
https://en.wikipedia.org/wiki/Pipeline_(Unix)

Ora prendiamo in considerazione la parte iniziale, prima del carattere di pipe, ove se la variabile host contiene l'indirizzo IP pari a: "192.168.1.1" il comando:


PING -n 1 "%host%"

si tramuta in

  
PING -n 1 192.168.1.1

con i parametri " -n 1 " che indicano di eseguire al comando ping  il numero di echo in risposta alla richiesta (in questo caso uno solo)
https://technet.microsoft.com/it-it/library/dd469646(v=ws.10).aspx

Attivando questa parte del comando viene restituito in caso di IP correttamente raggiunto un messaggio del genere:

Originally posted by comandoPingOK comandoPingOK wrote:

Esecuzione di Ping 192.168.1.1 con 32 byte di dati:
Risposta da 192.168.1.1: byte=32 durata<1ms TTL=64
Statistiche Ping per 192.168.1.1:
    Pacchetti: Trasmessi = 1, Ricevuti = 1, Persi = 0 (0% persi),
Tempo approssimativo percorsi andata/ritorno in millisecondi:
    Minimo = 0ms, Massimo =  0ms, Medio =  0ms
 
 
mentre se vi fosse un IP non raggiungibile (esempio: 192.168.1.199) si otterrà qualcosa del genere:
Originally posted by comandoPingNonOK comandoPingNonOK wrote:

Esecuzione di Ping 192.168.1.199 con 32 byte di dati:
Richiesta scaduta.
Statistiche Ping per 192.168.1.199:
    Pacchetti: Trasmessi = 1, Ricevuti = 0, Persi = 1 (100% persi),

Di consrguenza ciascuna riga viene processata dalla "pipe" e fornita al successivo comando FINDSTR ove si va a ricercare la sottostringa "ms" che in casi di PING ove IP è raggiunto sarà presente,altrimenti no.
In base al risultato verrà impostato il valore di ERRORLEVEL:
http://www.robvanderwoude.com/errorlevel.php
https://blogs.msdn.microsoft.com/oldnewthing/20080926-00/?p=20743
http://www.lagmonster.org/docs/DOS7/y-if.html

Quindi con la valutazione del valore di ERRORLEVEL

  
if %ERRORLEVEL% == 0

ove nel caso sia uguale a zero si presenta il messaggio OK, con l'elenco dei file, altrimenti (con ERROLEVELdiverso da zero) si fornisce il messaggio del mancato raggiungimento dell'indirizzo IP.


PS quando alleghi del codice, come previsto dal regolamento del forum, racchiudilo fra tag code (questa volta ho provveduto io).

 



Edited by willy55 - 20/Feb/2017 at 16:41
Willy
Back to Top
Cisco View Drop Down
Utente Base
Utente Base


Joined: 17/Feb/2014
Location: Varese
Status: Offline
Points: 95
Post Options Post Options   Thanks (0) Thanks(0)   Quote Cisco Quote  Post ReplyReply Direct Link To This Post Posted: 21/Feb/2017 at 11:41
Ciao,Cry  no, non ho mai dovuto affrontare nessun comando DOS o altro perchè non è il mio campo e affronto questi problemi o per pura conoscenza mia o, come in questo caso, per lavoro.

Ti ringrazio Smile per la spiegazione, vedrò di ricordarmi di taggare eventuali codici.


Edited by Cisco - 21/Feb/2017 at 11:45
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,078 seconds.