Discussione:
file batch
(troppo vecchio per rispondere)
Franco
2007-03-05 09:00:19 UTC
Permalink
Vorrei fare in modo che quando si accende il PC DOPO una certa data ed
una certa ora, compaia sullo schermo un certo messaggio. Il resto deve
proseguire come al solito.
Qualcuno mi può aiutare? i miei ricordi del DOS si affievoliscono...
Gioacchino
2007-03-05 14:58:31 UTC
Permalink
Post by Franco
Vorrei fare in modo che quando si accende il PC DOPO una certa data
ed una certa ora, compaia sullo schermo un certo messaggio. Il resto
deve proseguire come al solito. Qualcuno mi può aiutare? i miei
ricordi del DOS si affievoliscono...
#######
@echo off
echo.set g=%%1>a.bat
echo.set m=%%2>>a.bat
echo.set a=%%3>>a.bat
echo.set o=%%4>>a.bat
echo.set i=%%5>>a.bat
echo.set s=%%6>>a.bat
echo.a %date% %time%>x.bat
echo.e104 20 >deb
echo.e107 20 >>deb
echo.e10F 20 >>deb
echo.e112 20 >>deb
echo.e115 20 20 20>>deb
echo.w>>deb
echo.q>>deb
type deb|debug x.bat >nul
call x.bat
del x.bat
del deb
del a.bat
echo aaaammggooiiss >temp
echo %a%%m%%g%%o%%i%%s%>>temp
#######

sostituisci aaaa con anno, mm con mese, gg con giorno, oo con ora, ii
con minuti e ss con secondi che specificano la "certa" data.

Poi la seconda parte dovrebbe fare uso del debug e controllare partendo
da sinistra qual'è la data minore (o maggiore). A quel punto si ritorna
un errorlevel con la chiamata all'interrupt 21, ah=4c e con if
errorlevel si discrimina il tutto.
Purtroppo non ho tempo adesso per fare questa seconda parte.

--
Gioacchino
2007-03-05 18:13:47 UTC
Permalink
Post by Franco
Vorrei fare in modo che quando si accende il PC DOPO una certa data
ed una certa ora, compaia sullo schermo un certo messaggio. Il resto
deve proseguire come al solito. Qualcuno mi può aiutare? i miei
ricordi del DOS si affievoliscono...
Sostituisci alla riga 21
"aaaammggooiiss"
rispettivamente con
anno in 4 cifre
mese in 2 cifre
giorno in 2 cifre
ora in 2 cifre
minuti in 2 cifre
secondi in 2 cifre

e sostituisci alla riga 53
M E S S A G G I O !
con il tuo messaggio...

p.s.: funziona con WinXp, la prima parte, quella dove ottieni la data e
l'ora deve essere sostituita con uno script simile in Win98 o Dos
puro... trovi il codice nei post precedenti...

#####
@echo off
echo.set g=%%1>a.bat
echo.set m=%%2>>a.bat
echo.set a=%%3>>a.bat
echo.set o=%%4>>a.bat
echo.set i=%%5>>a.bat
echo.set s=%%6>>a.bat
echo.a %date% %time%>x.bat
echo.e104 20 >deb
echo.e107 20 >>deb
echo.e10F 20 >>deb
echo.e112 20 >>deb
echo.e115 20 20 20>>deb
echo.w>>deb
echo.q>>deb
type deb|debug x.bat >nul
call x.bat
del x.bat
del deb
del a.bat
echo aaaammggooiiss >temp.bat
echo %a%%m%%g%%o%%i%%s%>>temp.bat
echo.a80 >deb
echo.mov si, 100 >>deb
echo.mov di, 111 >>deb
echo.mov al, [si] >>deb
echo.mov ah, [di] >>deb
echo.inc si >>deb
echo.inc di >>deb
echo.cmp al, ah >>deb
echo.je 86 >>deb
echo.mov cl, 7 >>deb
echo.sub al, ah >>deb
echo.lahf >>deb
echo.shr ah, cl >>deb
echo.mov di, 106 >>deb
echo.mov al, ah >>deb
echo.add al, 30 >>deb
echo.stosb >>deb
echo.int 20 >>deb
echo.>>deb
echo.p =80 100 >>deb
echo.e 100 73 65 74 20 41 3D >>deb
echo.r cx >>deb
echo.7 >>deb
echo.w >>deb
echo.q >>deb
type deb|debug temp.bat >nul
call temp.bat
if %a%==1 goto dopodata
goto fine
:dopodata
echo M E S S A G G I O !
:fine
del deb
del temp.bat
set g=
set m=
set a=
set o=
set i=
set s=
#####

--
Franco
2007-03-06 08:45:35 UTC
Permalink
OK, vado a provare. Pensavo fosse più semlice, mi rendo conto di averti
fatto perdere molto tempo.
grazie infinite
Franco
Gioacchino
2007-03-06 11:05:21 UTC
Permalink
Post by Franco
OK, vado a provare. Pensavo fosse più semlice, mi rendo conto di
averti fatto perdere molto tempo. grazie infinite
Franco
di niente, se vuoi ti spiego il codice che è un pò contorto... :-)

--
Franco
2007-03-09 08:48:55 UTC
Permalink
Post by Gioacchino
Post by Franco
OK, vado a provare. Pensavo fosse più semlice, mi rendo conto di
averti fatto perdere molto tempo. grazie infinite
Franco
di niente, se vuoi ti spiego il codice che è un pò contorto... :-)
Magari. Così mi rinfresco un pò la memoria.
Gioacchino
2007-03-09 15:23:19 UTC
Permalink
Post by Franco
Post by Gioacchino
Post by Franco
OK, vado a provare. Pensavo fosse più semlice, mi rendo conto di
averti fatto perdere molto tempo. grazie infinite
Franco
di niente, se vuoi ti spiego il codice che è un pò contorto... :-)
Magari. Così mi rinfresco un pò la memoria.
La prima parte del codice "spezza" le variabili d'ambiente %date% e
%time% in giorno, mese, anno, ore, minuti e secondi.
Questo puoi farlo anche nel modo che tu sai ma solo in WinXp.

Poi viene creato un file con due righe, la prima è:
aaaammggooiiss, ovvero la data che vuoi utilizzare tu
e la seconda con:
una stringa anno,mese,giorno,ora,minuti,secondi

#####
echo aaaammggooiiss >temp.bat
echo %a%%m%%g%%o%%i%%s%>>temp.bat
#####

Poi si prepara il file da inviare al debug:
nel codice assembler utilizziamo due puntatori "si" e "di", il primo
punta all'inizio della stringa con la data che ti interessa, il secondo
punta all'inizio della stringa della data attuale. I dati letti a
quell'offset sono comparati, se sono uguali si prosegue alla cifra meno
significativa, altrimenti uno dei due è più grande dell'altro. In
questo caso si sottrae il codice ascii contenente la data specificata
con quella attuale. Il risultato è negativo se la data attuale è
maggiore di quella specificata, positivo altrimenti. A questo punto di
utilizza il flag 7 del microprocessore che specifica se il segno è
attivato, il valore viene poi convertito in numero e scritto come
settimo carattere nel file stesso. Poi viene aggiunta la stringa "set
A=" davanti al numero.
Il debug viene eseguito.

#####
echo.a80 >deb
echo.mov si, 100 >>deb
echo.mov di, 111 >>deb
echo.mov al, [si] >>deb
echo.mov ah, [di] >>deb
echo.inc si >>deb
echo.inc di >>deb
echo.cmp al, ah >>deb
echo.je 86 >>deb
echo.mov cl, 7 >>deb
echo.sub al, ah >>deb
echo.lahf >>deb
echo.shr ah, cl >>deb
echo.mov di, 106 >>deb
echo.mov al, ah >>deb
echo.add al, 30 >>deb
echo.stosb >>deb
echo.int 20 >>deb
echo.>>deb
echo.p =80 100 >>deb
echo.e 100 73 65 74 20 41 3D >>deb
echo.r cx >>deb
echo.7 >>deb
echo.w >>deb
echo.q >>deb
type deb|debug temp.bat >nul
#####

Qui è molto semplice. Viene settata la variabile d'ambiente e con l'if
si discrimina il tutto.

#####
call temp.bat
if %a%==1 goto dopodata
goto fine
:dopodata
echo M E S S A G G I O !
:fine
del deb
del temp.bat
set g=
set m=
set a=
set o=
set i=
set s=
#####

--
Franco
2007-03-12 10:39:28 UTC
Permalink
Grazie, sei un vero artista!
Gioacchino
2007-03-12 19:52:31 UTC
Permalink
Post by Franco
Grazie, sei un vero artista!
Grazie per i complimenti!
Al prossimo batch!

--

Loading...