1

Следующий скрипт должен проверять, изменилось ли количество файлов и папок с момента последнего запуска пакетного файла. Если это так, он печатает сообщение и обновляет счет.

К сожалению, это не совсем работает. Я думаю, что у меня есть проблема с утверждениями 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 я попытался удалить пробел перед > в
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

2 ответа2

2

Если вы поместите эхо перед операторами if, вы увидите, где находится ошибка:

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

Вот результат, который я получил с эхом:

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

Ваши a -results имеют пробелы позади (те, которые вы читаете из лог-файлов).

Если вы измените свою подпрограмму сохранения на отображение переменной без пробела до > то она будет работать:

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

Попробуйте NEQ, а не НЕ и ==

см .: http://ss64.com/nt/if.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .