Condividi:        

[BAT]Ciclo a tempo

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

[BAT]Ciclo a tempo

Postdi Luko92 » 17/07/12 15:17

Sera a tutti!
Mi servirebbe creare uno script in bat che, una volta avviato, avvii un programma dopo 45 secondi dalla partenza dello script stesso (le macchine con cui lavoro ci mettono 30s a ricevere l' IP ed il programma che andrò a lanciare se è senza rete riavvia la macchina, creando un loop).
Idee?
Vi ringrazio
Luko92
Newbie
 
Post: 2
Iscritto il: 21/06/09 14:50

Sponsor
 

Re: [BAT]Ciclo a tempo

Postdi valeriot90 » 17/07/12 17:55

Invece del batch perchè non provi ad usare il windows script host, vedi se ti può aiutare, dovrebbero fare al caso tuo:

http://www.hwupgrade.it/forum/archive/i ... 17955.html
http://www.hwupgrade.it/forum/showthread.php?t=1280163

Edit: Ops, forse da windows xp non funziona più, prova comunque.
valeriot90
Utente Senior
 
Post: 477
Iscritto il: 08/05/09 20:19
Località: localhost 127.0.0.1

Re: [BAT]Ciclo a tempo

Postdi BlackJack4051 » 23/07/12 14:38

Benissimo!

Ti creo subito questo script in Batch Scripting = BAT

Allora, considerando che incrementando una variabile dichiarata e inizializzata a 0, per arrivare a 2000 incrementi ci mette circa 1 secondo.

Puoi provare a eseguire questo script che ho creato per calcolare più o meno quanto ci mette ad arrivare a tot incrementi


Codice: Seleziona tutto
@echo off
set /A a=0
:start
echo %a%
set /A a=%a% * 2000 (
goto pauses
) else (
goto start
)
:pauses
pause


Modifica il valore 2000 con altri valori fino a che non trovi il valore giusto.

Ora ti spiego a cosa serve questo: 2000 in questo caso è 1 secondo circa nella realtà. Per far passare 45 secondi basta impostare un contatore e inizializzare una variabile a 2000*45.

In C si dice: controllare una iterazione da un valore sentinella che in questo caso è 2000*45, se invece i secondi erano variabili per esempio eri te che dovevi decidere dopo quanti secondi avviare il programma, si definiva iterazione controllata da un contatore.


Questo è lo script vero e proprio:

Codice: Seleziona tutto
@echo off
cls
:start
echo.
set /P tempo=Inserisci i second (Es. 45):
echo.
set /P com=Inserisci il comando che vuoi eseguire allo scadere dei %tempo% secondi:
set /A cont=2000 * %tempo%
set /A var=0
:timer
set /A var=%var% + 1
if %var% EQU %cont%  (
goto finish
) else (
goto timer
)
:finish
%com%
echo.
echo.
set /P continuare=Vuoi continuare? s/n:
if %continuare% EQU s (
goto start
) else (
exit
)



Ecco questo è il tuo script! Ho inserito qualche funzione in più, così da rendertelo più funzionale.

Se hai problemi dimmi tutto!!!
BlackJack4051
Utente Junior
 
Post: 11
Iscritto il: 23/07/12 11:29

Re: [BAT]Ciclo a tempo

Postdi maxmula » 19/09/12 23:58

Ciao,
vedo solo ora questo post, immagino che nel frattempo tu abbia risolto!

Purtroppo, in batch, la gestione dei tempi d'attesa è un po' un casino: una volta c'era l'istruzione Sleep, che ti permetteva di attendere un certo numero di millisecondi... poi però è stata eliminata.

Per ovviare, puoi usare un trucchetto abbastanza semplice: ordini al PC di inviare dei comandi PING a sè stesso!
Se leggi la pagina di help del comando PING (basta che lo digiti da prompt MSDOS, senza alcun parametro), scopri questo:

Sintassi: ping (...)
Opzioni:
(...)
-n conteggio ........ Numero di richieste echo da inviare.
(...)
-w timeout .......... Timeout in millisecondi per l'attesa di ogni risposta.



Quindi se devi aspettare 20 secondi, puoi far eseguire il comando:

Codice: Seleziona tutto
ping 127.0.0.1 -n 20 -w 1000


Non è precisissimo ma funziona! 8)

Per eliminare tutta la serie di messaggi di risposta più le statistiche finali, puoi ridirezionare l'output, così da non visualizzare nulla; Il risultato finale è un piccolo script batch (WAIT.bat), che puoi anche archiviare in una cartella raggiungibile tramite la variabile di sistema Path, così li potrai richiamare ogni volta che ti serve:


Codice: Seleziona tutto
rem                              Wait - Script per l'attesa di un numero voluto di secondi
rem                              Sintassi da linea di comando: WAIT [numerosecondi]
rem                              Esempio: WAIT 5
rem
rem                              By maxmula - PC-Facile... e molti altri prima di lui!

@echo off
echo.
echo Aspetto %1% secondi...
ping 127.0.0.1 -n %1% -w 1000 >NUL
echo.
echo Attesa terminata!


Ulteriore documentazione la trovi qui:

http://malektips.com/dos0017.html
http://malektips.com/xp_dos_0002.html

Spero ti sia utile...
Ciao!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Re: [BAT]Ciclo a tempo

Postdi valeriot90 » 27/09/12 19:13

considerando che incrementando una variabile dichiarata e inizializzata a 0, per arrivare a 2000 incrementi ci mette circa 1 secondo.

E su quale base l'hai calcolato?
Scusa ma in informatica ciò che hai scritto non ha senso, la velocità di esecuzione di un programma dipende dalle caratteristiche del processore, quanto è impegnato, l'uso della ram, gli altri processi.....
valeriot90
Utente Senior
 
Post: 477
Iscritto il: 08/05/09 20:19
Località: localhost 127.0.0.1

Re: [BAT]Ciclo a tempo

Postdi Dylan666 » 10/01/13 12:18

Non so se serve ancora ma quando sono incappato in esigenze simili ho usato un programmino che è stato creato appositamente, si chiama wait.exe:

http://www.vicobiscotti.it/wait.htm

Adesso esiste anche questa alternativa:

http://www.sleepcmd.com/
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Re: [BAT]Ciclo a tempo

Postdi maxmula » 10/01/13 12:45

Dylan666 ha scritto:Non so se serve ancora ma quando sono incappato in esigenze simili ho usato un programmino che è stato creato appositamente, si chiama wait.exe:

http://www.vicobiscotti.it/wait.htm

Adesso esiste anche questa alternativa:

http://www.sleepcmd.com/



Nel corso degli anni (o meglio dei decenni, visto che il linguaggio Batch esiste "da un po'" ) sono stati creati diversi programmini del genere; Con una minima di conoscenza di base di un qualsiasi linguaggio ed un compilatore in grado di generare file direttamente eseguibili (ce ne sono molti free), chiunque potrebbe anche crearsi la propria versione personalizzata.

Oltre al funzionamento, però, tutti questi programmini hanno una cosa in comune: richiedono che sul sistema che "ospita" lo script sia presente anche l'eseguibile in questione... il che può andar bene su un singolo PC ma implica problematiche non indifferenti quando si tratta di distribuire il file batch su più sistemi (C'è già il comando aggiuntivo? E' nella cartella giusta? Se manca, come faccio ad aggiungerlo? Non posso obbligare l'utente a compiere manualmente tutte le operazioni preliminari!).

In un caso del genere, si rischia di finire per creare un pacchetto d'installazione piuttosto sofisticato (o di introdurre complessi controlli aggiuntivi nello script) solo per usare un .bat sul sistema remoto, ovvero il gioco non vale la candela: è proprio per questo motivo che, in parallelo agli eseguibili che mettono una pezza a questa (grave) mancanza del linguaggio batch, sono fioriti un sacco di metodi alternativi.
Al saggio programmatore l'ardua scelta della miglior soluzione per le sue necessità. :)

Ciao!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34


Torna a Programmazione


Topic correlati a "[BAT]Ciclo a tempo":


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti