Variabili e file batch
Guida rapida a variabili, condizioni e cicli, per scrivere file .bat o .cmd.
echo e commenti
@echo off
echo Ciao mondo
echo.
rem Questo è un commento
:: Anche questo è un commento
@echo off all'inizio dello script evita di mostrare ogni comando eseguito.
Variabili
set nome=Michele
echo %nome%
set /p risposta=Come ti chiami?
set /a somma=5+3
set /a contatore+=1
set nome=
set /pchiede un valore all'utente.set /aesegue calcoli (solo interi).set nome=elimina la variabile.setda solo elenca tutte le variabili.
Variabili d'ambiente predefinite
| Variabile | Contenuto |
|---|---|
%USERNAME% | Nome utente |
%COMPUTERNAME% | Nome del computer |
%USERPROFILE% | Cartella del profilo |
%APPDATA% | Dati applicazioni dell'utente |
%TEMP% | Cartella temporanea |
%SYSTEMROOT% | Cartella di Windows |
%DATE% / %TIME% | Data e ora |
%CD% | Cartella corrente |
%~dp0 | Cartella dello script |
%1 ... %9 | Parametri passati allo script |
%ERRORLEVEL% | Codice di uscita dell'ultimo comando |
%~dp0 è fondamentale per far funzionare gli script indipendentemente da dove vengono lanciati.
if
if "%nome%"=="Michele" echo Ciao Michele
if exist file.txt echo Il file esiste
if not exist cartella mkdir cartella
if %errorlevel% neq 0 echo Errore
if %numero% gtr 10 echo Maggiore di 10
if /i "%x%"=="si" echo Confermato
Operatori numerici: equ, neq, lss, leq, gtr, geq. /i ignora maiuscole e minuscole.
Con else, tutto sulla stessa riga:
if exist file.txt (
echo Esiste
) else (
echo Non esiste
)
for
for %%f in (*.txt) do echo %%f
for /l %%i in (1,1,10) do echo %%i
for /r C:\Dati %%f in (*.log) do echo %%f
for /d %%d in (*) do echo %%d
for /f "tokens=*" %%a in (file.txt) do echo %%a
for /f "tokens=1,2 delims=," %%a in (dati.csv) do echo %%a - %%b
for /f %%a in ('dir /b') do echo %%a
Nel file batch si usa %%variabile, da riga di comando %variabile.
Etichette, goto e call
goto :fine
echo Questa riga viene saltata
:fine
call altro.bat
call :funzione argomento
exit /b 0
:funzione
echo Argomento: %1
exit /b
Menu di esempio
@echo off
:menu
cls
echo 1. Mostra IP
echo 2. Pulisci DNS
echo 3. Esci
set /p scelta=Scelta:
if "%scelta%"=="1" ipconfig & pause & goto menu
if "%scelta%"=="2" ipconfig /flushdns & pause & goto menu
if "%scelta%"=="3" exit /b
goto menu
Redirezione e concatenazione
comando > file.txt
comando >> file.txt
comando 2> errori.txt
comando > tutto.txt 2>&1
comando > nul
comando1 & comando2
comando1 && comando2
comando1 || comando2
comando1 | comando2
| Simbolo | Significato | ||
|---|---|---|---|
> | Scrive sovrascrivendo | ||
>> | Aggiunge in coda | ||
2> | Redirige gli errori | ||
& | Esegue di seguito | ||
&& | Esegue il secondo solo se il primo riesce | ||
| `\ | \ | ` | Esegue il secondo solo se il primo fallisce |
| `\ | ` | Pipe: l'output diventa l'input del successivo |
Altri comandi utili negli script
pause
timeout /t 10
cls
title Titolo finestra
color 0A
start "" notepad.exe
choice /c SN /m "Continuare"
Espansione ritardata nei cicli
Dentro blocchi e cicli, %variabile% viene letta una volta sola. Per leggere il valore aggiornato:
setlocal enabledelayedexpansion
set tot=0
for %%i in (1 2 3) do (
set /a tot+=%%i
echo !tot!
)