PDA

View Full Version : Creare un BAT in DOS


finalcut
12-02-2024, 08:25
Ho programmato una telecamera per salvare su un server (un mio vecchio PC che ora utilizzo solo per questa funzione) i video prodotti dalla stessa in caso di allarme. Già la "creazione" del server (su windows 10) mi ha creato non pochi problemi ma ora, con grande soddisfazione, tutto funziona. Ora dovrei attivare una pianificazione (usando appunto l'utilità di pianificazione di win10) che mi elimini ogni giorno la directory più vecchia di "tot" giorni.
Prima di mettere in funzione la telecamera avevo già predisposto un semplice .bat che funzionava a meraviglia (cancellava cioè i file MP4 più vecchi di 3 giorni). Il problema però è che ho scoperto che la telecamera salva i video in questo modo:
Video (directory principale)
2024 (anno)
02 (mese)
10 (giorno)
11
12
13
...
In altre parole la directory da cancellare (poniamo ogni 4 giorni quindi nell'esempio proposto la directory del giorno 13) cambia ogni volta, mentre il mio .bat semplicemente puntava alla directory principale.
Quindi ... qui mi sono fermato perché non ho le competenze per proseguire.
Anni fa, proprio su questo forum, a suo tempo un "caro" utente mi aveva predisposto un piccolissimo file .PHP che faceva la stessa cosa ogni qualvolta un utente visualizzava sul sito l'ultima foto proposta. Se pensate possa servire lo posto ma, data la differenza di linguaggi, credo serva a poco.
Qualcuno ha un idea ? Grazie
Roberto

finalcut
12-02-2024, 08:28
Dimenticavo, il BAT che avevo scritto era il seguente:
FORFILES /P “D:\VideoCooperativa” /M *.JPG /D -1 /C “CMD /C DEL @PATH”

finalcut
14-02-2024, 09:57
Scusatemi: nessuna idea ?

Perseverance
14-02-2024, 11:19
Se devi cancellare le cartelle più vecchie di 4 giorni non puoi fare così? Probabilmente và sistemato un po' ma dovresti partire da questa base.
FORFILES /p "D:\VideoCooperativa" /s /m *.* /D -4 /C "cmd /c del @relpath"

finalcut
17-02-2024, 07:52
Se devi cancellare le cartelle più vecchie di 4 giorni non puoi fare così? Probabilmente và sistemato un po' ma dovresti partire da questa base.
FORFILES /p "D:\VideoCooperativa" /s /m *.* /D -4 /C "cmd /c del @relpath"
Ti ringrazio per il suggerimento che mi ha stimolato a capire e a cercare. Per tua conoscenza ti dico che il tuo .bat mi da questo errore: "Errore, sintassi non valida. L'opzione /C non è consentita per un numero di volte superiore a "1".

Ho girato ancora in rete ed ho trovato (spero ti interessi) questo:
@echo on
:: set folder path
set dump_path=d:\VideoCooperativa\2024\02

:: set min age of files and folders to delete
set max_days=4

:: remove files from %dump_path%
forfiles -p %dump_path% -m *.* -d -%max_days% -c "cmd /c del /q @path"

:: remove sub directories from %dump_path%
forfiles -p %dump_path% -d -%max_days% -c "cmd /c IF @isdir == TRUE rd /S /Q @path"
cmd /k

Il primo e ultimo "comando" li toglierò una volta testato bene il tutto. Funziona ma l'unico inconveniente è che ogni mese dovrò modificare il batch con il numero mese successivo ed ogni anno ... il nuovo anno.
Grazie ancora Roberto