检测文件或文件夹数量的变化

检测文件或文件夹数量的变化

以下脚本用于检查自上次运行批处理文件以来文件和文件夹的数量是否已更改。如果已更改,则打印一条消息并更新计数。

不幸的是,它不太管用。我认为我if的字符串比较语句有问题。

有谁知道我怎样才能让这个脚本运行?

@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

编辑:

>根据@Rik的建议,我尝试删除and之前的空格
echo %filecountb%>"countfile.log"echo %dircountb%>"countdir.log"但在我的操作系统上不起作用。解决方案是添加一个TRIM函数,在从日志文件中读取空格后删除空格。

::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

答案1

如果你在 if 语句之前放置一个 echo,你会看到错误的位置:

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

这是我通过 echo 得到的结果:

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

你的a结果后面有空格(您从日志文件中读取的内容)。

如果你改变保存例程来回应变量没有之前的空间>将会起作用:

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

结果:

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

答案2

尝试 NEQ 而不是 NOT 和 ==

看:http://ss64.com/nt/if.html

相关内容