Se supone que el siguiente script verifica si la cantidad de archivos y carpetas ha cambiado desde la última vez que se ejecutó el archivo por lotes. Si es así, imprime un mensaje y actualiza los recuentos.
Lamentablemente no funciona del todo. Creo que tengo un problema con las ifdeclaraciones en mis comparaciones de cadenas.
¿Alguien sabe cómo puedo hacer que el script funcione?
@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:
Después @ sugerencia de Rik traté de retirar el espacio antes >de
echo %filecountb%>"countfile.log"y echo %dircountb%>"countdir.log"pero eso no funcionó en mi sistema operativo. La solución fue agregar una TRIMfunción para eliminar los espacios después de leerlos de los archivos de 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
fuente

>no funcionó para ti (para mí sí, bajo Windows 7). Usted no tiene que ejecutar dos veces antes de poder ver el efecto debido a sus existentes.logs todavía tenían espacios en ella. Pero suTRIMfunción también funcionará.Pruebe NEQ en lugar de NOT y ==
ver: http://ss64.com/nt/if.html
fuente