Giorno della settimana odierno per gli script batch

Se intendiamo utilizzare una politica di backup basata su script batch pianificati, in cui si vuole recuperare versioni di file fino ad una settimana, risulta indispensabile conoscere che giorno siamo per differenziare il nome della cartella in cui eseguire il salvataggio.

robocopy C:\ D:\backup\lun /MIR

Purtroppo a partire da Windows XP, il comando date /T oppure la variabile di ambiente %date% di default, nella versione italiana, restituiscono la data nel formato gg/mm/aaaa (06/10/2008) al posto del precedente ggg gg/mm/aaaa (lun 06/10/2008), che conteneva il giorno della settimana.

Per ripristinare il vecchio comportamento, è sufficiente modificare il formato della data breve dalle Opzioni internazionali del pannello di controllo.

Formato data breve in Windows XP

Su Windows Vista la sintassi del formato è cambiata in ddd dd/mm/yyyy ed è stata leggermente modificata la finestra delle opzioni. In entrambi i casi, si andrà a modificare una chiave di registro del profilo utente.

HKEY_CURRENT_USER\Control Panel\International\sShortDate

Una volta effettuata la modifica, diventa semplice nel file batch ottenere una nuova variabile ed eseguire il backup.

set weekday=%date:~0,3%
robocopy C:\ D:\backup\%weekday% /MIR

In alternativa, se non fosse possibile modificare il valore tramite l’interfaccia utente, è possibile utilizzare la linea di comando.

reg add "HKCU\Control Panel\International" /f /v sShortDate /t REG_SZ /d "ggg gg/mm/aaaa"

Come ultima opzione, se per qualunque motivo non fosse possibile modificare il formato della data breve, è possibile avviare una sessione DOS in modalità legacy, ma è necessario un codice leggermente più complesso per estrapolare l’informazione che ci interessa.

@echo off
echo.|command /C date|find "data corrente" > "%tmp%\weekday.tmp"
for /f "tokens=5" %%a in ('type "%tmp%\weekday.tmp"') do set weekday=%%a
del "%tmp%\weekday.tmp"

Attenzione: l’esempio è scritto per Windows XP versione italiana. Per altre versioni o lingue è necessario adattare il codice.