Показать полную графическую версию : [решено] Проблема с командой FIND
angel_lyucifer
13-03-2016, 02:35
Всем привет, пишу программу Говорящие часы но возникла проблема с командой 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.php?attachmentid=134866&stc=1&d=1457826426
Уже неделю бьюсь над этой проблемой....
Помогите пожалуйста исправить эту ошибку?
Foreigner
13-03-2016, 03:11
find работает правильно -- ищет "2:00" и находит в строке "22:00".
используйте findstr
findstr "\<2:00" m.txt
angel_lyucifer
13-03-2016, 05:13
find работает правильно -- ищет "2:00" и находит в строке "22:00". »
Я вас не понял....
Foreigner
13-03-2016, 05:21
А чего непонятного? 22:00
angel_lyucifer
13-03-2016, 16:57
А чего непонятного? 22:00 »
Ладно... Но почему одна цифра съедается?
Foreigner
13-03-2016, 17:23
Но почему одна цифра съедается? »
Исходя из вашего скриншота ничего не съедается, Идет переход с 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
findstr "\<2:00" m.txt »
Ясно спасибо но ваш вариант все равно не сработал.
Еще будут идеи?
Foreigner
13-03-2016, 18:21
angel_lyucifer, Реальное время 2 часа ночи, а файле config.txt десять вечера. Я правильно понимаю? По другому не должно быть. У вас случайно не перепутано системное время (в config.txt, может туда пишется вместо дня ночь? Или другой часовой пояс.)
angel_lyucifer
13-03-2016, 20:48
Реальное время 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
17:15 findstr или find видит как 7:15 »
Я не знаю, как у вас это получается
http://s28.postimg.org/zd1yxo55p/image.png (http://postimage.org/)
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
angel_lyucifer, Еще картинка для понимания
http://s21.postimg.org/n1kfl27qf/image.png (http://postimage.org/)
Хрень какая, а что мешает через тот же find вместо "7:15" искать " 7:15"? Пробел, конечно, мало кто замечает, но это таки тоже символ. Наконец для полного извращения можно парсить вывод
time /t
Ибо в этом случае время выводится в формате hh:mm даже для не двузначных часов, сиречь 2 часа 15 минут ночи будут выглядеть как 02:15.
angel_lyucifer
14-03-2016, 18:58
Еще картинка для понимания »
Спасибо за наглядное пособие, мне очень помогло.
Пробел, конечно, мало кто замечает »
Пробелы, конечно сильно мешают особенно когда они незаметны...
Спасибо все, коллеги.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.