Detectar uma mudança no número de arquivos ou pastas

1

O script a seguir deve verificar se o número de arquivos e pastas foi alterado desde a última vez em que o arquivo em lote foi executado. Em caso afirmativo, imprime uma mensagem e atualiza as contagens.

Infelizmente, não funciona bem. Acho que tenho um problema com as instruções if nas comparações de minhas sequências.

Alguém sabe como posso fazer o script funcionar?

@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

Editar:

Após a sugestão do @Rik, tentei remover o espaço antes de > em echo %filecountb%>"countfile.log" e echo %dircountb%>"countdir.log" , mas isso não funcionou no meu sistema operacional. A solução foi adicionar uma função TRIM para remover os espaços depois de lê-los nos arquivos de log.

::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
    
por Rui Branco 13.12.2013 / 23:03

2 respostas

2

Se você colocar um eco antes das instruções if, verá onde está o erro:

echo if NOT "%filecountb%" == "%filecounta%" goto :news
echo if NOT "%dircountb%" == "%dircounta%" goto :news
if NOT "%filecountb%" == "%filecounta%" goto :news
if NOT "%dircountb%" == "%dircounta%" goto :news

Este é o resultado que obtive com o eco:

if NOT "10" == "10 " goto :news
if NOT "22" == "22 " goto :news
news
Press any key to continue . . .

Seus a -results têm espaços atrás deles (aqueles que você lê nos arquivos de log).

Se você alterar sua rotina de salvamento para fazer eco da variável sem o espaço antes de > , ela funcionará:

:save
echo %filecountb%>"countfile.log"
echo %dircountb%>"countdir.log"

Resultado:

if NOT "10" == "10" goto :news
if NOT "22" == "22" goto :news
no news
Press any key to continue . . .
    
por 14.12.2013 / 03:50
1

Experimente o NEQ em vez de NÃO e ==

veja: link

    
por 14.12.2013 / 01:47