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 if
declaraciones 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 TRIM
funció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.log
s todavía tenían espacios en ella. Pero suTRIM
función también funcionará.Pruebe NEQ en lugar de NOT y ==
ver: http://ss64.com/nt/if.html
fuente