Lo script seguente dovrebbe verificare se il numero di file e cartelle è cambiato dall'ultima volta che è stato eseguito il file batch. In tal caso, stampa un messaggio e aggiorna i conteggi.
Sfortunatamente non funziona del tutto. Penso di avere un problema con le if
istruzioni nei miei confronti di stringhe.
Qualcuno sa come posso far funzionare la sceneggiatura?
@echo off
::Check number of dir's and files in last run
set /p filecounta=<"countfile.log"
set /p dircounta=<"countdir.log"
::Check number number of dir's and files currently
for /f %%A in ('dir /a-d-s-h /b ^| find /v /c ""') do set filecountb=%%A
for /d %%G in (*) do set /a dircountb=dircountb+1
::Compares the number of counts in the past with the present
if not "%filecountb%"=="%filecounta%" goto :news
if not "%dircountb%"=="%dircounta%" goto :news
CALL :save
echo no news
pause
exit
:news
CALL :save
echo news
pause
exit
:: Subs
:: Put number of dir and files in log file
:save
echo %filecountb% >"countfile.log"
echo %dircountb% >"countdir.log"
GOTO:EOF
Modificare:
Dopo @ suggerimento di Rik Ho provato a rimuovere lo spazio prima >
di
echo %filecountb%>"countfile.log"
e echo %dircountb%>"countdir.log"
, ma che non ha funzionato nel mio sistema operativo. La soluzione stava aggiungendo una funzione TRIM
per rimuovere gli spazi dopo averli letti dai file di registro.
::Check number of dir's and files in last run
set /p filecounta=<"countfile.log"
set /p dircounta=<"countdir.log"
CALL :TRIM %filecounta% filecounta
CALL :TRIM %dircounta% dircounta
.
.
.
:TRIM
SET %2=%1
GOTO :EOF