MS-DOS — Introduzione
Che cos’è e a cosa serve
La funzione primaria di ogni sistema operativo è rendere utilizzabili le risorse hardware e offrire all’utente un modo coerente per impartire comandi. MS-DOS è un SO a linea di comando: l’interazione avviene digitando istruzioni che il sistema interpreta ed esegue. L’efficienza nell’uso di memoria e disco ne ha favorito la diffusione negli anni ’80 e nei primi ’90.
I componenti fondamentali
IO.SYS— livello basso (DOS BIOS): inizializzazioni e servizi di base verso l’hardware;MSDOS.SYS— il kernel del DOS: funzioni di alto livello del sistema operativo;COMMAND.COM— l’interprete dei comandi (la shell testuale).
Nota: in PC-DOS (IBM) i nomi corrispondenti sono IBMBIO.COM e IBMDOS.COM. Nelle versioni Windows 95/98 la struttura cambia, ma la catena “firmware → loader → DOS/Windows” resta.
Prompt e struttura logica
All’avvio compare una schermata testuale con il prompt:
C:\>
significa “sono pronto a ricevere comandi nella directory corrente del disco C:”. I dischi sono organizzati come un albero di directory; la radice è C:\. I percorsi usano la barra rovesciata \.
Sintassi generale dei comandi
COMANDO [unità:][percorso]nomefile [parametri] [/opzioni]
Esempio:
COPY C:\SORGENTI\*.PAS B:\SRC\ /V
Comandi fondamentali (pronti da usare)
Visualizzazione e ambiente
DIR Rem elenco in verticale
DIR /P Rem pausa a fine schermata
DIR /W Rem vista compatta (orizzontale)
TYPE C:\LEGGIMI.TXT Rem mostra il contenuto di un file di testo
CLS Rem pulisce lo schermo
VER Rem versione del DOS
Directory e file
MD C:\DATI Rem crea directory
RD C:\DATI\VECCHI Rem rimuove directory vuota
CD \UTENTI\ANNA Rem cambia directory corrente
COPY C:\*.PAS B:\SRC\ Rem copia file
DEL C:\TEMP\*.TMP Rem cancella file
REN C:\RAPPORTO.TXT RELAZIONE.TXT Rem rinomina file
Strumenti su disco (dipendono dalla versione)
TREE C:\ /F Rem struttura ad albero (anche con i file)
CHKDSK C: Rem verifica disco (in molti DOS: usare SCANDISK)
DISKCOPY A: A: Rem copia "fisica" floppy
FORMAT A: Rem formatta (soprattutto per floppy)
LABEL C: Rem etichetta del volume
VOL C: Rem mostra etichetta e numero di serie
DATE /T & TIME /T Rem mostra data e ora (senza /T le imposta)
File batch: automatizzare sequenze
Un file batch (.BAT) è una lista di comandi eseguiti in sequenza. Parole chiave utili: ECHO/ECHO OFF, REM, GOTO ed etichette (:ETICHETTA), IF/IF EXIST/IF ERRORLEVEL n, FOR %%V IN (lista) DO ..., SHIFT, CALL.
SALVA.BAT — copia i file elencati nella directory di destinazione
@ECHO OFF
IF "%1"=="" GOTO USO
SET DEST=%1
SHIFT
:LOOP
IF "%1"=="" GOTO FINE
IF EXIST "%1" COPY "%1" "%DEST%"
SHIFT
GOTO LOOP
:USO
ECHO Sintassi: SALVA destinazione file1 [file2 ...]
GOTO FINE
:FINE
MDEL.BAT — cancella i file elencati
@ECHO OFF
IF "%1"=="" GOTO USO
:LOOP
IF "%1"=="" GOTO FINE
IF EXIST "%1" DEL "%1"
SHIFT
GOTO LOOP
:USO
ECHO Sintassi: MDEL file1 [file2 ...]
:FINE
COMP.BAT — pipeline con controllo ERRORLEVEL
@ECHO OFF
IF "%1"=="" GOTO USO
PAS1 "%1"
IF ERRORLEVEL 1 GOTO ERROR
PAS2 "%1"
IF ERRORLEVEL 1 GOTO ERROR
LINK "%1"
IF ERRORLEVEL 1 GOTO ERROR
GOTO FINE
:USO
ECHO Uso: COMP nome_sorgente_senza_estensione
GOTO FINE
:ERROR
ECHO Errore di compilazione o link.
:FINE
Nota storica — varianti DOS, Windows 9x e passaggio a NT
MS-DOS 3.x–6.x / PC-DOS: DOS “puro” a 16 bit. Windows 9x (95/98/ME): interfaccia grafica con DOS sottostante; IO.SYS cambia ruolo; MSDOS.SYS diventa file di configurazione testuale. Windows NT → 2000/XP → 10/11: architettura diversa (kernel NT a 32/64 bit). Il prompt CMD.EXE mantiene compatibilità di superficie; il sistema non è più “DOS-based”.
Aggiornamento a Windows (moderno)
Avvio: da BIOS/MBR a UEFI/GPT
Sui PC attuali il firmware è UEFI. UEFI carica eseguibili EFI da una ESP (EFI System Partition) su dischi GPT. Per Windows: il firmware avvia il Windows Boot Manager, che legge il database BCD e carica kernel e ambiente iniziale. La catena resta: firmware → boot manager → kernel, ma senza i limiti storici dell’MBR.
Architettura: kernel NT e sottosistemi
- Kernel NT (ring 0) + HAL (astrazione hardware);
- Processi e thread preemptive, scheduler a priorità, SMP/NUMA;
- Memoria virtuale 32/64 bit con paging a domanda, ASLR, DEP;
- Driver kernel/user-mode, Plug&Play e ACPI;
- Servizi gestiti dallo Service Control Manager;
- Sicurezza a base di SID/ACL, UAC e livelli di integrità;
- File system: NTFS (permessi, journaling, compressione, EFS), exFAT, ReFS (edizioni server).
Configurazione: dal CONFIG.SYS al Registro
Al posto di CONFIG.SYS/AUTOEXEC.BAT, Windows usa il Registro (HKLM/HKCU), i driver, i servizi e strumenti di diagnostica (Registro eventi, Performance Monitor, Gestione dispositivi).
Shell e automazione: CMD vs PowerShell
Windows conserva CMD.EXE per compatibilità: i batch precedenti funzionano. Per automazione moderna c’è PowerShell, shell a oggetti con un linguaggio potente, moduli e una pipeline che trasferisce oggetti (non solo testo).
Esempi equivalenti
CMD (stile DOS):
DIR C:\DATI
COPY C:\SRC\*.TXT D:\BACKUP\
DEL D:\BACKUP\OLD\*.*
MOVE C:\TMP\*.LOG C:\ARCHIVIO\
PowerShell (oggetti e parametri espliciti):
Get-ChildItem C:\DATI
Copy-Item C:\SRC\*.txt -Destination D:\BACKUP\
Remove-Item D:\BACKUP\OLD\*.*
Move-Item C:\TMP\*.log -Destination C:\ARCHIVIO\
Tabella di equivalenze
hngfh
Tabella di equivalenze (DOS → Windows moderno)
| Azione | DOS / CMD storico | Windows moderno (CMD / PowerShell) |
|---|---|---|
| Elencare contenuti | DIR |
DIR · PS: Get-ChildItem (alias dir, ls) |
| Leggere file di testo | TYPE file |
PS: Get-Content file |
| Copiare file | COPY |
PS: Copy-Item · Robusto: ROBOCOPY |
| Spostare file | MOVE |
PS: Move-Item |
| Eliminare file | DEL, ERASE |
PS: Remove-Item (alias rm) |
| Rinominare | REN/RENAME |
PS: Rename-Item |
| Creare/Rimuovere dir | MD/RD |
PS: New-Item -ItemType Directory · Remove-Item -Recurse |
| Cambiare dir | CD/CHDIR |
PS: Set-Location (alias cd) |
| Vista ad albero | TREE |
PS: Get-ChildItem -Recurse (oppure mantieni TREE) |
| Partizionare dischi | FDISK (storico) |
DISKPART · PS: Get-Disk, Initialize-Disk, New-Partition, Set-Partition, Format-Volume |
| Formattare | FORMAT |
FORMAT · PS: Format-Volume |
| Etichetta volume | LABEL |
LABEL · PS: Set-Volume -NewFileSystemLabel |
| Info volume | VOL |
PS: Get-Volume |
| Copiatura dischi | DISKCOPY (floppy) |
Oggi: imaging/clone (es. DISM per immagini, tool di terze parti) · Per directory: ROBOCOPY |
| Controllo disco | CHKDSK |
CHKDSK C: /F /R · PS: Repair-Volume -DriveLetter C -Scan / -OfflineScanAndFix |
| Deframmentazione | DEFRAG |
DEFRAG C: /U /V · PS: Optimize-Volume -DriveLetter C |
| Backup (DOS) | BACKUP / RESTORE |
Moderni: WBADMIN (immagini/sistema), ROBOCOPY (dati) · PS: mod. Windows Server Backup (New-WBPolicy…) |
| Immagini/Deploy | — | DISM (Deployment Image Servicing and Management) · PS: cmdlet DISM via Dism module |
| Storico file | — | GUI File History · CMD: fhmanagew.exe (gestione storico) |
| Confronto file testo/binary | FC (/B per binario) |
PS: Compare-Object (Get-Content f1) (Get-Content f2) · Integrità: Get-FileHash |
| Confronto binario veloce | COMP |
PS: Get-FileHash f1; Get-FileHash f2 (stesso algoritmo → file identici) |
| Pulire schermo | CLS |
PS: Clear-Host (alias cls) |
| Versione | VER |
PS: $PSVersionTable (PowerShell), [System.Environment]::OSVersion (OS), winver (GUI) |
| Memoria | MEM |
CMD: SYSTEMINFO · PS: Get-ComputerInfo o Get-CimInstance Win32_OperatingSystem |
| Data/Ora | DATE / TIME |
PS: Get-Date / Set-Date |
| Prompt personalizzato | PROMPT |
PS: definire funzione prompt nel profilo (es. function prompt { "PS $PWD> " }) |
| Rendere avviabile | SYS (DOS) |
Moderni: BCDBOOT (copie boot files), BOOTREC/BOOTSECT (riparazioni da WinRE) |
| MBR→GPT (in place) | — | MBR2GPT.EXE (da Win10 in su) |
| Attributi file | ATTRIB |
PS: Get-Item/Set-ItemProperty (.Attributes) · Oppure ATTRIB |
| Ricerca nel testo | FIND |
PS: Select-String (alias grep) |
Esempi rapidi
REM Diskpart (CMD)
diskpart /s script.txt
REM Esempio script.txt:
REM list disk
REM select disk 1
REM clean
REM convert gpt
REM create partition primary size=102400
REM format fs=ntfs quick label=DATI
REM assign letter=E
# PowerShell (Storage)
Get-Disk
Initialize-Disk -Number 1 -PartitionStyle GPT
New-Partition -DiskNumber 1 -Size 100GB -DriveLetter E
Format-Volume -DriveLetter E -FileSystem NTFS -NewFileSystemLabel DATI
chkdsk C: /F /R
# PowerShell
Repair-Volume -DriveLetter C -Scan
Repair-Volume -DriveLetter C -OfflineScanAndFix
wbadmin start backup -backupTarget:D: -include:C:\Dati -quiet
robocopy C:\Dati D:\Backup /MIR /R:2 /W:2 /XJ
fc file1.txt file2.txt
# PowerShell: confronto contenuti testo
Compare-Object (Get-Content file1.txt) (Get-Content file2.txt)
# Verifica identità binaria
Get-FileHash file1.bin; Get-FileHash file2.bin
Nota: alcuni cmdlet (es. Windows.ServerBackup) sono disponibili soprattutto su Windows Server. Su Windows 10/11 client, per backup scriptati usa wbadmin, robocopy o soluzioni terze; per dischi/partizioni punta a diskpart o ai cmdlet del modulo Storage.
Ponte didattico — da batch a PowerShell
Riscrivere gli esercizi batch in PowerShell mantiene gli stessi concetti (parametri, loop, controlli), ma con strumenti moderni e sicuri.
param(
[Parameter(Mandatory)]
[string]$Dest,
[Parameter(ValueFromRemainingArguments)]
[string[]]$Files
)
foreach($f in $Files){
if(Test-Path $f){
Copy-Item $f -Destination $Dest -ErrorAction Stop
} else {
Write-Warning "File non trovato: $f"
}
}