我在批处理编程方面不是很有经验。我已经将各种代码拼凑在一起,但它也不能像我想要的那样工作。
这是问题所在。日志文件在目录中创建。有些是多个条目,有些是单个条目。它们都遵循特定的模式。前任
START STRING 1234
NAME1 ADRESS1 ETC
NAME2 ADRESS2 ETC
NAME3 ADRESS3 ETC
有时一个文件中有多个名称条目,有时它只是一个条目。所有文件都有起始字符串。我需要做的是解析这些日志文件并在另一个目录中重新创建它们,一个文件对应一个文件中的每个名称,每个文件都采用单个命名文件的格式。使用上面的示例,它将创建 3 个文件,每个文件如下所示:
START STRING
NAME ADRESS ETC
这是到目前为止的代码。它有点工作..除非目录中一次有一个以上的日志文件,否则我最终会得到一些条目,其中只有两个 START STRING,我需要避免。换句话说,我需要它分别浏览每个日志文件,而不是像我假设的那样,将所有日志文件视为一个单独的大文本文件。
@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
我很确定有一种更聪明的方法可以做到这一点,但据我所知。想知道我是否可以简单地匹配起始字符串并以某种方式将其删除,而不删除第一行,或者最好避免将双起始字符串放在一起。