Я не очень опытен в пакетном программировании. Я вроде как ковылял разные кусочки кода, но это не совсем так, как я этого хочу.Анализ нескольких текстовых файлов и их восстановление до заданного шаблона
В этом проблема. Файлы журналов создаются в каталоге. Некоторые из них представляют собой несколько записей. Все они следуют определенной схеме. F.ex.
START STRING 1234
NAME1 ADRESS1 ETC
NAME2 ADRESS2 ETC
NAME3 ADRESS3 ETC
Иногда в одном файле имеется более одного имени, иногда это всего лишь одна запись. Все файлы имеют начальную строку. Мне нужно проанализировать эти файлы журналов и воссоздать их в другом каталоге, по одному файлу для каждого имени в файле, каждый в формате одного именованного файла. Используя приведенный выше пример, это создаст 3 файлов, каждый из вида:
START STRING
NAME ADRESS ETC
Вот код ГНФАР. Это своего рода работы. За исключением случаев, когда в каталоге больше одного файла журнала, я получаю несколько записей с двумя СТАРТАМИ СТАРТА, которые мне нужно избегать. Другими словами, мне нужно, чтобы он просматривал каждый файл журнала отдельно, а не, как я предполагаю, обрабатывает все файлы журнала как один большой текстовый файл.
@Echo off
@setlocal enableextensions enabledelayedexpansion
:::First find out how many lines a file has.
Set _File=*.log
Set /a _Lines=0
For /f %%j in ('Type %_File%^|Find "" /v /c') Do Set /a _Lines=%%j
set /a "linecount= _Lines"
:::Grab the first line always and then create a new file depending on how many lines the file contained
:LOOP
if %linecount% GEQ 2 (
set /a "linecount = linecount - 1"
set lines=1 %linecount%
set curr=1
for /f "delims=" %%a in ('type *.log') do (
for %%b in (!lines!) do (
if !curr!==%%b echo %%a >> c:\temp\logs\%linecount%.log
)
set /a "curr = curr + 1"
)
)
if %linecount% GEQ 2 (GOTO LOOP)
endlocal
Я уверен, что есть более умный способ сделать это, но это насколько я получил. Удивление, могу ли я просто сопоставить стартовую строку и как-то удалить ее, не удаляя эту первую строку или, желательно, избегая двойного начала строки.
Если файл журнала содержит более одного имени, которое вы хотите сохранить? Первый? Последний? – Aacini
Исходные имена файлов журналов не имеют большого значения, поскольку после их анализа они будут удалены. Неважно, какие файлы вызывают, как только они были проанализированы. В этом примере их просто назовут 2.log, 3.log и т. Д. – user2463125
По моему скромному мнению, если вы измените свои требования по запросу в течение некоторого времени после размещения вопроса, вы должны подождать гораздо больше времени, прежде чем закрыть вопрос как " решено "; в противном случае вы пренебрегаете людьми, которые сначала читают ваш вопрос, когда он был неполным и не может быть разрешен ... :( – Aacini