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

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

NLOLegion 28-02-2016 06:55 2611022

Запуск файла при обнаружении в файле нужного символа
 
Уважаемые, прошу помощи. Перепробовал кучу вариантов, но знаний добиться результатов не хватает. Нужно выполнить задание по условию. Если в Первом тхт есть цифра 1, то запуск Первого приложения. Если во Втором тхт цифра 2, то запуск Второго приложения. Если в Третьем тхт есть цифра 3, то запуск Третьго приложения. Если в нескольких из этих тхт есть цифры, то и запускать всё что им соответствует. Пути ко всем файлам могут сильно отличаться. Понимаю что через переменные делать надо,но ничего не выходит. Заранее благодарен.

Iska 28-02-2016 07:23 2611024

Цитата:

Цитата NLOLegion
Если в Первом тхт есть цифра 1, то запуск Первого приложения. »

Код:

type "1.txt" | findstr.exe "1" && "1.exe"
Цитата:

Цитата NLOLegion
Если во Втором тхт »

Здесь как понимать — отдельное условие «Если» или как продолжение первого условия, т.е. — «ИначеЕсли»?

Цитата:

Цитата NLOLegion
Если в нескольких из этих тхт есть цифры, то и запускать всё что им соответствует. »

Поясните.

Цитата:

Цитата NLOLegion
Пути ко всем файлам могут сильно отличаться. »

Да бога ради. Указывайте полные абсолютные или частичные относительные пути. В чём проблема-то.

NLOLegion 29-02-2016 18:37 2611518

Цитата:

Цитата Iska
Iska »

имеется любое количество фалов:1.txt, 2.txt, 3.txt и т.д. В любом из них может оказаться цифра соответствующая названию: 1,2,3 и т.д. Но может оказаться и в нескольких, и во всех, и ни в каком. Данная цифра будет меткой ( sed её найдёт в левом тексте и отправит в нужный файл. в случае успешного нахождения такой цифры-метки будет запускаться необходимое приложение ( программа, батник) или несколько. Данная задача будет применима в голосовом управлении на котором я немного повёрнут.

Foreigner 29-02-2016 19:16 2611533

Цитата:

Цитата NLOLegion
sed её найдёт в левом тексте и отправит в нужный файл »

Что за левый текст?

Цитата:

Цитата NLOLegion
Но может оказаться и в нескольких, и во всех, и ни в каком. »

Наверное стоит пояснить структуру самих файлов, как эти цифры расположены, отдельной цифрой (числом) в строке или являются составной частью другого числа или слова? Как быть если, например, в файле 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 2612000

Цитата:

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) находятся либо на отдельной строке...
Не думал что так просто! Спасибо огромное! Работает на ура!!!

orbita 26-04-2016 12:13 2629737

Добрый день.
что то с приведенными примерами не получается запуск файла при обнаружении в файле нужного символа.
есть лог и при появлении в логе строки с текстом pppd local IP address 100.*.*.* запуск start.bat

Iska 26-04-2016 12:20 2629741

orbita, покажите конкретный лог (упаковав его в архив и приложив к сообщению) и конкретный код, с которыми «не получается».

orbita 26-04-2016 12:38 2629749

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 2629753

orbita, В вашем примере единиц пруд пруди. Если их все заменить, то и findstr ничего не найдет.

Iska 26-04-2016 13:16 2629757

Цитата:

Цитата orbita
в этом примере например всегда запускается 1.exe хоть есть 1 хоть нет в файле 1.txt »

«В этом примере» единицы есть в каждой строке. Ровно то, что и заказывали указанным кодом.

Цитата:

Цитата orbita
при появлении в логе 4й строки запуск файла, если ip начинается не с 100 то никаких действий. »

Какое именно «ip»? Если речь о каких-то конкретных строках из лога, эти условия нужно учитывать при поиске, либо предварительно выделить их среди прочих строк, а не тупо искать «100» в каждой строке лога.

orbita 26-04-2016 15:58 2629831

когда адрес назначается в этой строке pppd local IP address любой с началом 100.*.*.* запуск файла, если начало другое то выход.

Foreigner 26-04-2016 16:03 2629833

orbita,
Код:

1>nul findstr "pppd.local[^0-9]*100\..*" "1.txt" && start "" "1.exe"


Время: 22:10.

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