Войти

Показать полную графическую версию : CMD BAT редактирование txt


sis211
29-04-2016, 16:48
Не могу написать батник чтобы редактировал файл так как мне надо. Есть файл например 1.log его содержимое:

1. вариант когда есть аварии

LOADING PROGRAM VERSION 12.2-0
BTS ALARM LISTING
KRA038 BCF-2308 ENVIR 2016-04-29 13:15:21.26
*** ALARM
(29807) 7401 EXTERNAL AL 1
POWER
KRA038 BCF-2301 ENVIR 2016-04-29 14:15:21.21
*** ALARM
(29807) 7401 EXTERNAL AL 1
POWER
END OF BTS ALARM LISTING
COMMAND EXECUTED
BASE TRANSCEIVER STATION ALARMS HANDLING COMMAND <EO_>

2. вариант когда нет аварий

LOADING PROGRAM VERSION 12.2-0
BTS ALARM LISTING
/* NO MATCHING ALARMS FOUND */
END OF BTS ALARM LISTING
COMMAND EXECUTED
BASE TRANSCEIVER STATION ALARMS HANDLING COMMAND <EO_>

3. вариант, лог файла может быть какой угодно недописанный, когда когда сессия завершилась неудачно или зависла.

в 1-м варианте указаны 2 аварии а их может быть много
нужно сделать батник, чтобы он создавал новый файл 2.txt

форматы выхода:
1. вариант, когда аварии есть

BCF-2308
2016-04-29 13:15:21.26
BCF-2301
2016-04-29 14:15:21.21

2. если 2 вариант то писало:
NO MATCHING ALARMS FOUND
3. если ни то ни то, нужно чтобы в файл писал "LOADING..."

максимум что я смог сделать это написать такую команду, она как бы выдет результат который мне нужно, но он сильно длинный

findstr "BCF MATCHING" c:\1.log >2.txt

Georgio
29-04-2016, 17:33
@echo off

<"1.log">>"2.log" (
for /f "tokens=2-5" %%i in ('more') do @(
if /i "%%j" equ "ENVIR" echo.%%i& echo %%k %%l& set bool=*
if /i "%%i" equ "NO" echo.%%i %%j %%k %%l& set bool=*
)
if not defined bool echo LOADING...
)

exit/b

sis211
04-05-2016, 11:31
ого, какой простой код, спасибо получилось!

единственная проблема, он в файл добавляет новые строчки, а нужно чтобы файл пересоздавался.

Georgio
04-05-2016, 11:41
... он в файл добавляет новые строчки, а нужно чтобы файл пересоздавался. »



@echo off

<"1.log">"2.log" (

sis211
10-05-2016, 10:51
спасибо

sis211
17-06-2016, 15:50
Подскажите еще один вопрос. Решил, что ошибок при подключении многовато, а значит в общем получается много файлов со значением LOADING..., подскажите как сделать, чтобы в случае, когда скрипт пишет в файл 2.log строчку LOADING... он не писал ее а просто не изменял этот файл и оставлял значения которые там были до запуска перезаписи и редактирования.

Или второй вариант, при неуспешном выполнении (то есть когда в файл должно писаться Loading...), делать перезапуск:

я пробовал сделать так:

:loop1

1.exe

<"1.log">>"2.log" (
for /f "tokens=2-5" %%i in ('more') do @(
if /i "%%j" equ "ENVIR" echo.%%i& echo %%k %%l& set bool=*
if /i "%%i" equ "NO" echo.%%i %%j %%k %%l& set bool=*
)
if not defined bool Goto loop1
)

не сработал фокус.




© OSzone.net 2001-2012