|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ведение лога. Нумерация записей. Смещение записи при появлении новой. |
|
CMD/BAT - [решено] Ведение лога. Нумерация записей. Смещение записи при появлении новой.
|
Пользователь Сообщения: 63 |
Профиль | Отправить PM | Цитировать Допустим при запуске компа запускается батник записывающий в file.txt дату запуска (или же дату на момент выполнения батника). Дата просто для примера вместо неё может быть запись(копирование) содержимого файла.
Как выполнить подобные записи в лог file.txt таким образом, чтобы каждая новая запись появлялась на новой строчке? в идеале получить файл с таким по виду содержанием (информация может быть любой, но сейчас просто на примере даты): 1=20.11.2017 2=21.11.2017 3=23.11.2017 4=24.11.2017 5=25.11.2017 Возможно до 10 строк если пяти мне окажется мало. Но самое важное перезаписывать последнюю строку, а содержимое смещать вверх на одну строчку, то есть значение 5= переместиться на 4=, а 4= на 3=, в итоге значение 1= исчезает так как устаревает. |
|
Отправлено: 16:49, 20-11-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать NLOLegion, вот что я думаю по этому поводу: никаких «очередей» организовывать не нужно, всё, что потребно, укладывается в рамки существующих концепций: обычного лог-файла или журнала событий. Вы можете использовать что то, что другое. И в том, и в другом случае задача будет фактически состоять в а) добавлении новой записи и б) в извлечении последних N записей. Всё остальное — от лукавого.
|
Отправлено: 18:46, 21-11-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать Iska, конечно, можно записывать 6-ую строку к любым 5-ти (даже самому их написать), а потом sed-ом просто удалять 1-ую, и им же нумеровать, но и дураку ясно что это корявая реализация. Результат тот что надо, но вот решение кривое.
alpap, Цитата alpap:
|
|
Отправлено: 11:02, 22-11-2017 | #12 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать @Echo Off If "%~1"=="" Exit /B 222 Set /A N=5 Set "LogFile=Z:\Box_Out\Logfile.txt" >>"%LogFile%" Echo NN=%~1 Set /A NN=0 FOR /F "usebackq delims=" %%i IN (`more "%LogFile%"`) DO Call Set /A NN+=1 Set /A Nskip=%NN%-%N% If %Nskip% LSS 0 Set Nskip=0 SetLocal EnableExtensions EnableDelayedExpansion Set /A NN=0 >"%LogFile%.tmp" (FOR /F "usebackq tokens=2 delims==" %%i IN (`more +%Nskip% "%LogFile%"`) DO Set /A NN+=1 &Echo !NN!=%%i) move /Y "%LogFile%.tmp" "%LogFile%" >nul GoTo :Eof имя_скрипта.bat "тра ля ля" Если исходного лог-файла не было - он будет создан. Если исходный лог-файл длинее, чем задано, он будет усечен. Если исходный лог-файл короче, он будет дописан. Нумерация будет правильна. |
------- Отправлено: 21:03, 22-11-2017 | #13 |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать megaloman, это какое то волшебство батник делает то что мне нужно, но делает это потому что где-то я накривил своими руками, хочется исправить, посмотрите пожалуйста где косяк?
@Echo Off set /p ansver=<C:\1\1.txt If "ansver"=="" Exit /B 222 Set /A N=5 Set "LogFile=C:\1\Logfile.txt" >>"%LogFile%" Echo %ansver% Set /A NN=0 FOR /F "usebackq delims=" %%i IN (`more "%LogFile%"`) DO Call Set /A NN+=1 Set /A Nskip=%NN%-%N% If %Nskip% LSS 0 Set Nskip=0 SetLocal EnableExtensions EnableDelayedExpansion Set /A NN=0 >"%LogFile%.tmp" (FOR /F "usebackq tokens=2 delims==" %%i IN (`more +%Nskip% "%LogFile%"`) DO Set /A NN+=1 &Echo !NN!=%%i) move /Y "%LogFile%.tmp" "%LogFile%" >nul GoTo :Eof Скрипт отшибает всё что идёт до символа "равно", и переносит только "= очистить корзину". Мне в принципе это и надо. Но только здесь, в других подобных задачах нужна вся строка. |
Отправлено: 11:24, 23-11-2017 | #14 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать NLOLegion, Определитесь, что нужно.
В постановке задачи были строки вида: номер=что-то эдакое В моём решении при добавлении в лог-файл новой строки перед строкой записывался фиктивный номер NN, то есть новая строка приобретала вид: NN=что-то новенькое Вы не обратили на это внимание. NN в данном случае - это полная фикция, играющая роль номера, вместо него может быть что угодно, например, ку ку, или, как у Вас, часть Вашей строки до знака равно. Затем скрипт берёт полученное, пропускает с начала необходимое кол-во строк, отбрасывает старые номера= и вписывает необходимые новые. я не рассчитывал, что на входе будет строка с =, но после Вашего изменения вдруг получилось, то, что Вам нужно и о чём Вы не просили. Вот вариант. Он сможет обработать входящие строки со знаками равно. В лог-файл они войдут полностью. @Echo Off Set /A N=5 Set "LogFile=Z:\Box_Out\Logfile.txt" Set "InFile=Z:\Box_Out\1.txt Set /p ansver=<"%InFile%" If "%ansver%"=="" Exit /B 222 >>"%LogFile%" Echo NN=%ansver% Set /A NN=0 FOR /F "usebackq delims=" %%i IN (`more "%LogFile%"`) DO Call Set /A NN+=1 Set /A Nskip=%NN%-%N% If %Nskip% LSS 0 Set Nskip=0 SetLocal EnableExtensions EnableDelayedExpansion Set /A NN=0 >"%LogFile%.tmp" (FOR /F "usebackq tokens=1,* delims==" %%h IN (`more +%Nskip% "%LogFile%"`) DO Set /A NN+=1 &Echo !NN!=%%i) move /Y "%LogFile%.tmp" "%LogFile%" >nul GoTo :Eof |
------- Отправлено: 12:23, 23-11-2017 | #15 |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать megaloman, огромное спасибо за сей шедевр!
|
Отправлено: 12:44, 23-11-2017 | #16 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать NLOLegion, Если могут приходить строки как:
нечто=что-то новое так и: что-то новое А в лог-файла надо иметь: номер=что-то новое можно добавить одну сроку: |
------- Отправлено: 13:08, 23-11-2017 | #17 |
Пользователь Сообщения: 63
|
Профиль | Отправить PM | Цитировать Iska, вы столько раз мне помогали, отвечали на вопросы, что с моей строны будет невежеством не ответить.
Есть программа MSpeech, она выполняет роль голосового ассистента - тоесть при привышении порога громкости она записывает через микрофон речь в аудиофайл и через гугл себе в лог записывает текстовый вариант запроса. Если запрос соответствует записанной в программу команде, то выполняется установленный пользователем какой либо батник, в котором прописано какое-либо действо. При такой работе запрос пользователем не должен содержать лишние слова иначе будет не распознан( не найден в списке записанных пользователем). Но у программы есть возможность запуска батника по умолчанию если команда не найдена. У меня такой батник есть и он работает с логом данной программы. В основном через SED. Этот батник ищет последнюю распознанную строку и если находит установленные мной слова-метки то запускает соответствующие им следующие цепочки батников. Данная очередь нужна для подлержания памяти. Симуляция речи. Например: Мой запрос - какая погода? Комп - сегодня не очень то и холодно Очередь хронит в пяти строчках мои запросы. Мой второй запрос - а именно? Комп - минус 10, солнечно Мой третий запрос - что надеть? Комп - что хотите то и одевайте. Мне пофиг. Каждый раз программа не находя команды запускает батник по умолчанию который дописывает очередь и прорабатывая пять строчек начиная с последней ищет в них слова-метки для дальнейшей реакции - запуска нужного батника выдающего нужный ответ. Или ничего не делает если и в очереди нет нужных меток. |
Отправлено: 12:09, 25-11-2017 | #18 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Ведение лога запускаемых программ | rosalin | Скриптовые языки администрирования Windows | 12 | 02-10-2014 13:58 | |
Мультимедиа - ПО для записи с микрофона при появлении звука | santey007 | Программное обеспечение Windows | 4 | 06-06-2014 20:05 | |
Bandwith/Quota - Windows. Контроль URL, ведение лога в прозрачн.режиме. Чем? | Barit | Сетевые технологии | 2 | 11-03-2013 11:38 | |
CMD/BAT - [решено] Различные варианты исполнения по выбору. Ведение лога. | Kainos | Скриптовые языки администрирования Windows | 3 | 11-12-2011 14:10 | |
Установка - при инсталяции Vista Business зависает при появлении ProgressBar. | _ib_ | Microsoft Windows Vista | 5 | 18-09-2008 05:17 |
|