Iniziamo subito con
un breve tutorial sui comandi basilari per la creazione dei
file batch,
inserendo qualche esempio per capirne meglio la sintassi e
la struttura.
Apriamo un editor di testo (notepad) e scriviamo al suo
interno:
REM ------INIZIO CODICE-------
@echo off
cls
title NETSTAT TUTTOIRC.IT
echo NETSTAT PER PROVA SCRIPT
echo Di seguito verrano riportare le porte utilizzate dal
sistema:
netstat -na
pause
REM -------FINE CODICE--------
Fatto cio' salviamo il nostro lavoro e modifichiamo l'estenzione
del file da .txt a .bat
Chiameremo il nostro file Net.bat
Adesso clicchiamoci sopra due volte ed avviamo la sua esecuzione.
Come potete notare
il titolo della finestra e' "NETSTAT TUTTOIRC.IT",
impostato dal nostro file con il comando TITLE.
echo off fa si invece che venga visualizzata l'esecuzione
del comando ma non la scrittura dello stesso,
mentre la chiocciolina "@" fa si che il comando
che la segue non venga visualizzato.
Proseguiamo adesso con l'analisi dei comandi:
IF
GOTO
SET
Diamo una breve spiegazione per ognuno:
IF
Con questo comando è possibile creare dei criteri
di paragone all'interno di file batch.
Sintassi IF
IF [NOT] ERRORLEVEL numero comando
IF [NOT] stringa1==stringa2 comando
IF [NOT] EXIST nomefile comando
Ponendo il not davanti ai criteri di paragone si comunicherà
al sistema di eseguire i comandi solo nel caso
quella condizione non risulta vera. Esempio:
IF NOT pippo == pluto echo condizione non vera
ERRORLEVEL Controlla se l'ultimo programma eseguito ha
restituito un "numero" maggiore o uguale a quello
specificato
stringa1 == stringa2 Confronta le 2 stringhe e verifica
se sono uguali
EXIST Controlla la reale esistenza di un file
Il comando inoltre può essere seguito da un ELSE
che eseguirà i suoi comandi se la condizione citata
in IF risulta FALSA. Esempio:
IF pippo == pluto (echo condizione vera) ELSE (echo condizione
non vera)
La sintassi IF/ELSE può essere stesa anche su 2
linee. Es
IF pippo == pluto echo condizione vera
ELSE echo condizione non vera
IF dispone anche di altri paramentri, disponibili solo
le estensioni ai comandi sono abilitati, ossia:
/I
CMDEXTVERSION
DEFINED
/I offre maggiore flessibilità nel controllo di
due stringhe. La sintassi è:
IF /I stringa1 O.P. stringa2
dove O.P. può essere:
EQU - uguale
NEQ - non uguale
LSS - meno di
LEQ - meno di o uguale
GTR - maggiore di
GEQ - maggiore di o uguale
CMDEXTVERSION è molto simile a ERRORLEVEL, la differenza
sta che il confronto avviene su un numero di versione interna
associato alle estensioni di un comando.
DEFINED invece controlla l'esistenza di una variabile di
ambiente. Es
IF DEFINED prompt (echo variabile esistente) else (echo
variabile inesistente)
IF DEFINED guida (echo variabile esistente) else (echo variabile
inesistente)
Passiamo ora a GOTO
il comando goto dirige l'esecuzione su una determinata parte
del file, che prende il nome di etichetta. L'etichetta deve
essere preceduta dai :
capiremo meglio nell'esempio finale...
Con il comando SET è invece possibile creare una
variabile, controllarne una, un gruppo o tutte le variabili
esistenti:
Per creare una variabile si usa la sintassi: SET nomevar=valorevar
Esempio:
SET autore=Guerrjero
ora facendo echo %autore% otterremo Guerrjero
facendo SET autore ci verrà dato il suo valore, ossia
Guerrjero
citanto invece solo l'iniziale della parola, ci verrà
dato l'elenco delle variabili che iniziano con quella lettera,
omettendo anche quella invece avremmo l'elenco completo
delle variabili (c:\SET)
A questo punto non ci resta che terminare con un esempio
pratico.
Il file che andremo a creare simula la protezione di un
testo attraverso password, la lettura del testo infatti
sarà possibile solo quando inseriremo la password
corretta, negli altri casi invece riceveremo un messaggio
che ci avvertirà che la password inserita è
errata.
create un file con questo codice e dategli nome msg.bat
REM ---- INIZIO CODICE ----
@echo off
@cls
set pw=%1
if "%pw%" == "" (goto par) else (goto
avvio)
:avvio
echo PassWord d'accesso inserita: %1
if %pw% == nb139 (goto accesso) else (goto negazione)
:negazione
echo PassWord Errata... non puoi accedere alla lettura del
file
goto end
:accesso
echo PassWord accettata
echo In questo spazio si potrebbe inserire, per esempio,
un messaggio destinato ad un nostro amico che, grazie alla
password, verra' protetto da occhi indiscreti
echo Saluti da Guerrjero (powered by www.tuttoirc.it)
goto end
:par
echo Sintassi errata:
echo Utilzzare msg PassWord
goto end
:end
REM ---- FINE CODICE ----
ora per usarlo andate nel dos e posizionatevi nella cartella
dove risiede il file msg.bat
fatto questo fate 3 diverse prove:
1) c:\cartella\msg
2) c:\cartella\msg cammello
3: c:\cartella\msg nb139
Iniziamo subito col spiegare i primi dubbi... cosa indica
quel %1 ?
semplice, indica la PRIMA parola inserita dopo il nome del
file, ovvero la password. (nel nostro file infatti verra'
presa in considerazione
solo la prima parola, scrivere "msg gino paolo"
o "msg gino" è la stessa cosa, ma solo
nel nostro esempio... :D ). Quindi %1 la prima parola, %2
la seconda e cosi via... %* restituisce tutte le parole.
Notate ora il comando goto:
come vedete si salta da una parte all'altra del file come
se niente fosse, ma come? Semplice:
if "%pw%" == "" (goto par) else (goto
avvio)
traduzione:
se il valore di pw è uguale a niente vai all'etichetta
par (come vedete c'è una riga che inizia con :par
da notare i : prima del nome del'etichetta)
se invece questo valore esiste vai all'etichetta avvio (:avvio)
Il resto credo sia ormai chiaro, cmq basta studiarsi pochi
minuti quel codice per capire bene il tutto.
N.B.
Questo file è stato creato solo a scopo didattico,
non pensiate di proteggere realmente messaggi in questo
modo, in quanto un file batch è un file in chiaro.
Usando programmi di conversione in com/exe si potrebbero
ottenere risultati non desiderati, il tutto dipende dalla
flessibilità di conversione del programma stesso.
E' giunto finalmente il momento di passare al nostro mIRC
:)
Per il nostro esempio creeremo due seplici alias, il primo
capace di codare in automatico il file batch, ed il secondo
in grado di leggerlo ed usarlo:
creabatch {
if !$exists($shortfn($scriptdirbatch)) { mkdir $shortfn($scriptdirbatch)
}
if $exists($shortfn($scriptdirbatch\net.txt)) { .remove
-b $shortfn($scriptdirbatch\net.txt) } | if $exists($shortfn($scriptdirbatch\net.bat))
{ .remove -b $shortfn($scriptdirbatch\net.bat) }
.write $shortfn($scriptdirbatch\net.txt) @echo off
.write $shortfn($scriptdirbatch\net.txt) cls
.write $shortfn($scriptdirbatch\net.txt) title NETSTAT TUTTOIRC.IT
.write $shortfn($scriptdirbatch\net.txt) echo NETSTAT PER
PROVA SCRIPT
.write $shortfn($scriptdirbatch\net.txt) echo Di seguito
verrano riportare le porte utilizzate dal sistema:
.write $shortfn($scriptdirbatch\net.txt) netstat -na
.rename $shortfn($scriptdirbatch\net.txt) $shortfn($scriptdirbatch\net.bat)
}
usabatch {
.run $shortfn($scriptdirbatch\net.bat) > $shortfn($scriptdirbatch\netres.txt)
.play -es $shortfn($scriptdirbatch\netres.txt) 100
}
Unica cosa da spiegare credo sia ".run $shortfn($scriptdirbatch\net.bat)
> $shortfn($scriptdirbatch\netres.txt)":
praticamente il simbolo > trasferisce il risultato del
nostro comando bat nel file netres.txt, quindi nel nostro
caso
il listato delle porte.
Come notate da soli non c'e' niente di difficile e complicato,
ma con poche righe di codice si possono ottenere validi
mezzi di controllo dei comandi dos piu' comuni e usati,
come il ping, netstat, ipconfig, etc.
Naturalmente si possono creare combinazioni piu' ricche
e potenti, come sempre il tutto sta in mano alla vostra
fantasia :D
Guerrjero
www.tuttoirc.it
|