:: Titolo: "Ping Parlante" :: Versione: 1.2 :: Data: 18-Oct-2009 :: Autore: "Alessandro Pini" :: e-mail: md1871@mclink.it :: File: pping.bat :: Scopo: Utilizza il sintetizzatore vocale di Windows XP per pronunciare il tempo di ping. :: Utilizzo: Più o meno come il ping standard senza opzioni. Attenzione, questo script è "buono abbastanza per me", ma non è perfetto, né elegante: al momento fa tutto quello che *mi* serve, anche se in maniera piuttosto inefficiente; non sono previsti grandi miglioramenti, ma il sorgente è facilmente modificabile, accomodatevi pure. :: History: :: 1.0 [04-Jun-2007 "Primi esperimenti; funziona al primo colpo." "Alessandro Pini"] :: 1.1 [- "Al momento non divulgabile." "Non divulgabile"] :: 1.2 [18-Oct-2009 "Aggiunto timestamp per ogni riga." "Alessandro Pini"] :: Bug noti: :: Lo script è version-, language- e settings-dependant, cioè va adattato a seconda della versione di Windows, della lingua utilizzata (dubito che "durata" sia lungo 6 caratteri in tutte le lingue) e delle impostazioni (al momento il timestamp è l'unica cosa che mi viene in mente); come ho già scritto, è solo "buono abbastanza per me". :: Riporta solo risultati positivi standard: in caso di problemi l'utente viene lasciato a brancolare nel (uhm) silenzio; in quel caso, usate il ping standard. :: Tempi inferiori a 1 ms vengono riportati come 1 ms. :: L'HTA Ruba il focus ad ogni esecuzione, causando una specie di singhiozzo al sistema. :: Questo header utilizza un formato ibrido liberamente ispirato a quello del linguaggio REBOL: sarebbe il caso di dargli una raddrizzata. :: Futuro: :: Pronuncia degli altri tipi di risultati, per esempio "Impossibile trovare l'host..." :: Timestamp in formato fisso e non ambiguo (al momento dipende da come sono impostate le opzioni internazionali e della lingua di Windows). :: Variazione a piacere della voce: SAPI.SpVoice.Speak permette discegliere la voce, cambiarne tono e velocità... Sembra un giochino inutile, ma se avete diverse applicazioni parlanti permette di capire "a orecchio", immediatamente, da quale applicazione sta arrivando un certo messaggio. :: Parametrizzazione da linea di comando (parametri, voce, file di output...) :: Maggiore user-friendliness (per esempio, help in linea). :: Controllo degli errori. :: Licenza: :: Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Italy. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-nc-sa/2.5/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. :: Il prossimo comando disattiva la visualizzazione di ogni comando prima della sua esecuzione. @echo off :: Il prossimo comando permette di utilizzare in un certo modo le variabili all'interno dei cicli For. setlocal enabledelayedexpansion :inizio :: Il prossimo comando esegue un ping quasi standard e ne scompone il risultato, mettendone le componenti in alcune variabili. for /f "usebackq tokens=1,2,3,4,5*" %%a in (`ping -n 1 %1`) do ( :: Il prossimo comando filtra via qualsiasi riga di risultato che non sia una risposta standard. if %%a.==Risposta. ( :: Il prossimo comando ricostruisce la risposta standard e la stampa preceduta dal timestamp (ricostruire è una pessima idea in generale, ma qui non vale la pena di fare di meglio, attualmente). echo %date% %time% %%a %%b %%c %%d %%e %%f :: Il prossimo comando assegna la durata a una variabile apposita; sì, è una variabile in più, ma aumenta la pulizia del codice a costo (denaro, tempo e risorse del computer) quasi zero. set durata=%%e :: Il prossimo comando elimina i primi 7 caratteri, cioè le stringhe "durata=" o "durata<"; potrebbero essercene altre, ma non ne ho incontrate e non ho verificato come si deve (o si dovrebbe). set durata=!durata:~7! :: Il prossimo comando sostituisce la stringa "ms" con la stringa vuota, cioè elimina "ms". set durata=!durata:ms=! :: Il prossimo comando pronuncia la durata. MSHTA crea al volo un'HTA (applicazione HTML), che utilizza SAPI 5 (Speech Application Programming Interface). mshta vbscript:CreateObject^("SAPI.SpVoice"^).Speak^("!durata!"^)^(Window.close^) ) ) goto :inizio :: Il prossimo comando chiude il contesto locale aperto da setlocal. Sarebbe superfluo, poiché il contesto locale viene chiuso automaticamente all'uscita dal batch, ma preferisco chiuderlo esplicitamente (mi pare più "elegante" e mi eviterà problemi in futuro se dovessi decidere di riciclare questo codice). endlocal