Forse servirà solo a me ma – spesso – mi trovo ad archiviare una cartella, prima di modificarla, per averne una copia di backup.
Però mi piace che il backup abbia un “codice di versione”, ovvero: se archivio la cartella “pippo” voglio che l’archivio si chiami “pippo_2024-11-02_2034.7z” dove, tutto quello che viene dopo “pippo”, è un codice progressivo che identifica data e ora di creazione del backup, così che siano sequenziali, in ordine.
Per farlo, procedere come segue:
1] Aprire la cartella del “Invia a:” di Windows; usare win+r e digitare:
shell:sendto
2] Nella cartella che si apre, creare un file di testo e rinominarlo come:
ARCHIVIA_CARTELLA.bat
3] Aprire in modifica il file di cui sopra ed incollare il seguente codice:
@echo off
setlocal enabledelayedexpansion
:: ******************************************************************
:: Script per creare l'archivio della cartella passato come parametro, usando
:: 7z ed associando un codice progressivo automaticamente.
::
:: Versione 202-11-02
:: budus@hotmail.it
:: ******************************************************************
set percorso7z=
set archive_code=
set archive_name=
:: Immagazzina la data e ora corrente.
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (
set anno=%%c
set mese=%%b
set giorno=%%a
)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
set ora=%%a
set minuti=%%b
)
set archive_code=!anno!-!mese:~0,2!-!giorno:~0,2!_!ora:~0,2!!minuti:~0,2!
:: Verifica che il parametro sia una cartella e che esista.
if exist "%~1" (
if not exist "%~1\*.*" (
echo [I] Il percorso
echo "%~1"
echo e' una cartella vuota.
) else (
if exist "%~1\*" (
echo [I] Il percorso
echo "%~1"
echo e' una cartella.
) else (
echo [I] Il parametro
echo "%~1"
echo risulta essere un file.
goto end_with_error
)
)
) else (
echo [I] Il parametro
echo "%~1"
echo non risulta essere una cartella.
goto end_with_error
)
:: Estrapola il nome della cartella da archiviare.
for /f "delims=" %%a in ("%~1") do (
set archive_name=%%~nxa
)
echo [I] Archiviazione della cartella:
echo %1
echo con il codice: %archive_code%
echo nell'archivio: %archive_name%
for /f "delims=" %%a in ('where /R "%ProgramFiles%" 7z.exe') do (
if not defined percorso7z set percorso7z=%%a
goto end
)
:end
:: Se non è stato trovato 7z, emette errore.
if not defined percorso7z goto error__no7z
:: Esegue l'archiviazione usando 7z.
"%percorso7z%" a -bd -- "%archive_name%_%archive_code%" "%~1"
timeout 3
exit /B %errorlevel%
:error__no7z
echo [E] 7z non e' stato trovato in:
echo %ProgramFiles%
:end_with_error
@pause
exit /B 1
4] Chiudere e salvare il file bat.
Ora è sufficiente usare il menu contestuale di Esplora File di Windows (per Windows 11 si rende necessario aprire le opzioni aggiuntive, cosa fattibile se si tiene premuto il tasto Maiuscola/Shift), quindi, “Invia a” e “ARCHIVIA_CARTELLA.bat”.
Nel bat ho messo diversi commenti, dovrebbe essere chiaro (sì, fino ad un certo punto, me ne rendo conto …) cosa fa ogni pezzo di codice. Se proprio siete curiosi di approfondire, potete chiedermelo o usare qualsiasi AI ed incollare la porzione di codice che vi lascia perplessi, se non l’intero script.
Nel caso in cui preferiate eliminare la cartella dopo l’archiviazione, potente modificare la riga:
"%percorso7z%" a -bd -- "%archive_name%_%archive_code%" "%~1"
in:
"%percorso7z%" a -bd -sdel -- "%archive_name%_%archive_code%" "%~1"