Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема с командой FIND (http://forum.oszone.net/showthread.php?t=312626)

angel_lyucifer 13-03-2016 02:35 2615400

Проблема с командой FIND
 
Вложений: 1
Всем привет, пишу программу Говорящие часы но возникла проблема с командой FIND. Батник мой записывает в файл данное время а затем команда FIND многократно в цикле проверяет указное значение и если есть совпадения тогда запускается соответствующий времени звуковой скрипт. С 0:00 до 10:00 FIND работает нормально но с 10:00 до 23:00 уже работает не корректно искомая строка одну цифру как будто съедает в результате проверки значение неверное и в целом программа работает неправильно.

Пример
Код:

:every-15_minutes
Echo.%TIME:~0,-6%>m.txt
FIND "21:45" "m.txt"
if %ERRORLEVEL% == 0 (
start /w wscript.exe "sound\21ch-45_minutes.VBS"
start /w wscript.exe "TIMEOUT-60.VBS"
goto every-15_minutes) else (goto 2200)
:2200
FIND "22:00" "m.txt"
if %ERRORLEVEL% == 0 (
tart /w wscript.exe "sound\22ch.VBS"
start /w wscript.exe "TIMEOUT-60.VBS"
goto every-15_minutes) else (goto 2215)
:2215
start /w wscript.exe "Sleep.VBS"
FIND "22:15" "m.txt"
if %ERRORLEVEL% == 0 (
start /w wscript.exe "sound\22ch-15_minutes.VBS"
start /w wscript.exe "TIMEOUT-60.VBS"
goto every-15_minutes) else (goto 2230)
:2230
start /w wscript.exe "Sleep.VBS"
и т. д.

Вот рисунок с ошибкой.
http://forum.oszone.net/attachment.p...1&d=1457826426
Уже неделю бьюсь над этой проблемой....
Помогите пожалуйста исправить эту ошибку?

Foreigner 13-03-2016 03:11 2615401

find работает правильно -- ищет "2:00" и находит в строке "22:00".

используйте findstr
Код:

findstr "\<2:00" m.txt

angel_lyucifer 13-03-2016 05:13 2615406

Цитата:

Цитата Foreigner
find работает правильно -- ищет "2:00" и находит в строке "22:00". »

Я вас не понял....

Foreigner 13-03-2016 05:21 2615407

А чего непонятного? 22:00

angel_lyucifer 13-03-2016 16:57 2615566

Цитата:

Цитата Foreigner
А чего непонятного? 22:00 »

Ладно... Но почему одна цифра съедается?

Foreigner 13-03-2016 17:23 2615574

Цитата:

Цитата angel_lyucifer
Но почему одна цифра съедается? »

Исходя из вашего скриншота ничего не съедается, Идет переход с 1:15 до 2:00 c шагом в 15 минут, при этом find ищет в файле m.txt соответствующую строку -- "1:15", "1:30", "1:45" и "2:00". Поскольку в файле есть строка "22:00", то она полностью удовлетворяет условию поиска "2:00". Find не умеет искать с помощью дополнительных условий, т.е. находит любое соответствие.

angel_lyucifer 13-03-2016 17:58 2615581

Цитата:

Цитата Foreigner
findstr "\<2:00" m.txt »

Ясно спасибо но ваш вариант все равно не сработал.

Еще будут идеи?

Foreigner 13-03-2016 18:21 2615596

angel_lyucifer, Реальное время 2 часа ночи, а файле config.txt десять вечера. Я правильно понимаю? По другому не должно быть. У вас случайно не перепутано системное время (в config.txt, может туда пишется вместо дня ночь? Или другой часовой пояс.)

angel_lyucifer 13-03-2016 20:48 2615660

Цитата:

Цитата Foreigner
Реальное время 2 часа ночи, а файле config.txt десять вечера. »

В файле config.txt пишется пятизначное значение то есть 22:00 но искомая строка видит как четырехзначное то есть 2:00.

Примеры:
Пишет в файле config.txt
17:15 findstr или find видит как 7:15
11:00 findstr или find видит как 1:00
23:30 findstr или find видит как 3:30
10:00 findstr или find видит как 0:00
14:45 findstr или find видит как 4:45
20:00 findstr или find видит как 0:00
13:30 findstr или find видит как 3:30
и т. д.

Foreigner 13-03-2016 21:06 2615668

Цитата:

Цитата angel_lyucifer
17:15 findstr или find видит как 7:15 »

Я не знаю, как у вас это получается


Iska 13-03-2016 21:14 2615672

angel_lyucifer, указанные приложения ищут указанную подстроку в указанной строке. Подстрока «2:00» будет найдена и в «2:00», и в «22:00», и в «12:00», и в «bla-bla-bla2:00bla-bla-bla».

Для того, чтобы она была найдена только в «2:00», но не во всех остальных случаях, коллега Foreigner уже во втором сообщении указал, что нужно делать — использовать регулярное выражение. Но Вы как не слышите.

Foreigner 13-03-2016 21:24 2615679

angel_lyucifer, Еще картинка для понимания


Elven 14-03-2016 10:40 2615788

Хрень какая, а что мешает через тот же find вместо "7:15" искать " 7:15"? Пробел, конечно, мало кто замечает, но это таки тоже символ. Наконец для полного извращения можно парсить вывод
Код:

time /t
Ибо в этом случае время выводится в формате hh:mm даже для не двузначных часов, сиречь 2 часа 15 минут ночи будут выглядеть как 02:15.

angel_lyucifer 14-03-2016 18:58 2615971

Цитата:

Цитата Foreigner
Еще картинка для понимания »

Спасибо за наглядное пособие, мне очень помогло.
Цитата:

Цитата Elven
Пробел, конечно, мало кто замечает »

Пробелы, конечно сильно мешают особенно когда они незаметны...

Спасибо все, коллеги.


Время: 10:44.

Время: 10:44.
© OSzone.net 2001-