Показать полную графическую версию : [решено] Запуск файла при обнаружении в файле нужного символа
NLOLegion
28-02-2016, 06:55
Уважаемые, прошу помощи. Перепробовал кучу вариантов, но знаний добиться результатов не хватает. Нужно выполнить задание по условию. Если в Первом тхт есть цифра 1, то запуск Первого приложения. Если во Втором тхт цифра 2, то запуск Второго приложения. Если в Третьем тхт есть цифра 3, то запуск Третьго приложения. Если в нескольких из этих тхт есть цифры, то и запускать всё что им соответствует. Пути ко всем файлам могут сильно отличаться. Понимаю что через переменные делать надо,но ничего не выходит. Заранее благодарен.
Если в Первом тхт есть цифра 1, то запуск Первого приложения. »
type "1.txt" | findstr.exe "1" && "1.exe"
Если во Втором тхт »
Здесь как понимать — отдельное условие «Если» или как продолжение первого условия, т.е. — «ИначеЕсли»?
Если в нескольких из этих тхт есть цифры, то и запускать всё что им соответствует. »
Поясните.
Пути ко всем файлам могут сильно отличаться. »
Да бога ради. Указывайте полные абсолютные или частичные относительные пути. В чём проблема-то.
NLOLegion
29-02-2016, 18:37
Iska »
имеется любое количество фалов:1.txt, 2.txt, 3.txt и т.д. В любом из них может оказаться цифра соответствующая названию: 1,2,3 и т.д. Но может оказаться и в нескольких, и во всех, и ни в каком. Данная цифра будет меткой ( sed её найдёт в левом тексте и отправит в нужный файл. в случае успешного нахождения такой цифры-метки будет запускаться необходимое приложение ( программа, батник) или несколько. Данная задача будет применима в голосовом управлении на котором я немного повёрнут.
Foreigner
29-02-2016, 19:16
sed её найдёт в левом тексте и отправит в нужный файл »
Что за левый текст?
Но может оказаться и в нескольких, и во всех, и ни в каком. »
Наверное стоит пояснить структуру самих файлов, как эти цифры расположены, отдельной цифрой (числом) в строке или являются составной частью другого числа или слова? Как быть если, например, в файле 41.txt есть строка:
aaa bbb 4441 ccc
При условии, что искомые названия файлов (1,2,3) находятся либо на отдельной строке, либо являются отдельным "словом"
@echo off
setlocal
for /f "tokens=*" %%i in ('dir /b /s d:\test\*.txt') do (
1>nul findstr "\<%%~ni\>" "%%i" && call:exec %%~ni
)
goto:eof
:exec
if %1 equ 1 start notepad
if %1 equ 2 start calc
if %1 equ 3 start mspaint
NLOLegion
02-03-2016, 08:18
Foreigner
"Левый текст" это мой корявый сленг - прошу прощенья. Текст может быть любым, но у меня это лог программы. SED найдёт нужный символ и заменит его на цифру 1. Отправит в 1. txt. Цифру 2 он отправит в другой файл - 2.txt. И т.п. Цифра в файле будет единственным числом, следовательно воспринимается как "одна строка одно слово" (возможно в файле присутствие символа переноса каретки, но не думаю что это помешает. Вообще пытался реализовать таким путём, но не получается совместить более одного варианта:
setlocal enabledelayedexpansion
set /p answer=<C:\1.txt
if %answer%==1 goto :finish else goto :exit
:finish
start notepad
endlocal
плюс надо:
setlocal enabledelayedexpansion
set /p answer=<C:\2.txt
if %answer%==2 goto :finish else goto :exit
:finish
start mspaint
endloca
Foreigner При условии, что искомые названия файлов (1,2,3) находятся либо на отдельной строке...
Не думал что так просто! Спасибо огромное! Работает на ура!!!
Добрый день.
что то с приведенными примерами не получается запуск файла при обнаружении в файле нужного символа.
есть лог и при появлении в логе строки с текстом pppd local IP address 100.*.*.* запуск start.bat
orbita, покажите конкретный лог (упаковав его в архив и приложив к сообщению) и конкретный код, с которыми «не получается».
type "1.txt" | findstr.exe "1" && "1.exe"
в этом примере например всегда запускается 1.exe хоть есть 1 хоть нет в файле 1.txt
[SYSLOG]2016/4/26 03:06:39 ndm Core::Session: client disconnected.
[SYSLOG]2016/4/26 03:06:39 pppd PAP authentication succeeded
[SYSLOG]2016/4/26 03:06:39 pppd peer from calling number DВ:58:E1:F8:E4:F8 authorized
[SYSLOG]2016/4/26 03:06:39 pppd local IP address 100.138.163.114
[SYSLOG]2016/4/26 03:06:39 pppd remote IP address 177.38.122.7
[SYSLOG]2016/4/26 03:06:39 pppd primary DNS address 65.175.66.132
[SYSLOG]2016/4/26 03:06:39 pppd secondary DNS address 65.175.66.125
[SYSLOG]2016/4/26 03:06:39 ndm Network::Interface::Base: "PPPoE1": interface is up.
[SYSLOG]2016/4/26 03:06:39 ndm Network::Interface::PPP: interface "PPPoE1" is global, priority 1100.
[SYSLOG]2016/4/26 03:06:39 ndm Network::Interface::PPP: adding default route via PPPoE1.
при появлении в логе 4й строки запуск файла, если ip начинается не с 100 то никаких действий.
Foreigner
26-04-2016, 12:53
orbita, В вашем примере единиц пруд пруди. Если их все заменить, то и findstr ничего не найдет.
в этом примере например всегда запускается 1.exe хоть есть 1 хоть нет в файле 1.txt »
«В этом примере» единицы есть в каждой строке. Ровно то, что и заказывали указанным кодом.
при появлении в логе 4й строки запуск файла, если ip начинается не с 100 то никаких действий. »
Какое именно «ip»? Если речь о каких-то конкретных строках из лога, эти условия нужно учитывать при поиске, либо предварительно выделить их среди прочих строк, а не тупо искать «100» в каждой строке лога.
когда адрес назначается в этой строке pppd local IP address любой с началом 100.*.*.* запуск файла, если начало другое то выход.
Foreigner
26-04-2016, 16:03
orbita,
1>nul findstr "pppd.local[^0-9]*100\..*" "1.txt" && start "" "1.exe"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.