Запуск файла при обнаружении в файле нужного символа
Уважаемые, прошу помощи. Перепробовал кучу вариантов, но знаний добиться результатов не хватает. Нужно выполнить задание по условию. Если в Первом тхт есть цифра 1, то запуск Первого приложения. Если во Втором тхт цифра 2, то запуск Второго приложения. Если в Третьем тхт есть цифра 3, то запуск Третьго приложения. Если в нескольких из этих тхт есть цифры, то и запускать всё что им соответствует. Пути ко всем файлам могут сильно отличаться. Понимаю что через переменные делать надо,но ничего не выходит. Заранее благодарен.
|
Цитата:
Цитата NLOLegion
Если в Первом тхт есть цифра 1, то запуск Первого приложения. »
|
Код:
type "1.txt" | findstr.exe "1" && "1.exe"
Здесь как понимать — отдельное условие «Если» или как продолжение первого условия, т.е. — «ИначеЕсли»?
Цитата:
Цитата NLOLegion
Если в нескольких из этих тхт есть цифры, то и запускать всё что им соответствует. »
|
Поясните.
Цитата:
Цитата NLOLegion
Пути ко всем файлам могут сильно отличаться. »
|
Да бога ради. Указывайте полные абсолютные или частичные относительные пути. В чём проблема-то.
|
имеется любое количество фалов:1.txt, 2.txt, 3.txt и т.д. В любом из них может оказаться цифра соответствующая названию: 1,2,3 и т.д. Но может оказаться и в нескольких, и во всех, и ни в каком. Данная цифра будет меткой ( sed её найдёт в левом тексте и отправит в нужный файл. в случае успешного нахождения такой цифры-метки будет запускаться необходимое приложение ( программа, батник) или несколько. Данная задача будет применима в голосовом управлении на котором я немного повёрнут.
|
Цитата:
Цитата NLOLegion
sed её найдёт в левом тексте и отправит в нужный файл »
|
Что за левый текст?
Цитата:
Цитата NLOLegion
Но может оказаться и в нескольких, и во всех, и ни в каком. »
|
Наверное стоит пояснить структуру самих файлов, как эти цифры расположены, отдельной цифрой (числом) в строке или являются составной частью другого числа или слова? Как быть если, например, в файле 41.txt есть строка:
При условии, что искомые названия файлов (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
|
"Левый текст" это мой корявый сленг - прошу прощенья. Текст может быть любым, но у меня это лог программы. 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 то никаких действий.
|
orbita, В вашем примере единиц пруд пруди. Если их все заменить, то и findstr ничего не найдет.
|
Цитата:
Цитата orbita
в этом примере например всегда запускается 1.exe хоть есть 1 хоть нет в файле 1.txt »
|
«В этом примере» единицы есть в каждой строке. Ровно то, что и заказывали указанным кодом.
Цитата:
Цитата orbita
при появлении в логе 4й строки запуск файла, если ip начинается не с 100 то никаких действий. »
|
Какое именно «ip»? Если речь о каких-то конкретных строках из лога, эти условия нужно учитывать при поиске, либо предварительно выделить их среди прочих строк, а не тупо искать «100» в каждой строке лога.
|
когда адрес назначается в этой строке pppd local IP address любой с началом 100.*.*.* запуск файла, если начало другое то выход.
|
orbita,
Код:
1>nul findstr "pppd.local[^0-9]*100\..*" "1.txt" && start "" "1.exe"
|
Время: 22:10.
© OSzone.net 2001-