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"
  }
}