批处理脚本:通过多个文件搜索部分IP地址并进行记录

时间:2015-08-26 00:26:45

标签: batch-file

我有多个包含30个跃点的TraceRT日志文件。我只是寻找类似的IP(例如192.168.1),并希望将其记录在一个文件中: 1)成功:在%Filename%中找到%IP% 2)失败:在%Filename%

中找不到指定的IP

我正在尝试使用:

rem************************************************************
:START

@ ECHO OFF

rem US date
set YEAR=%DATE:~10,4%
set MONTH=%DATE:~4,2%
set DAY=%DATE:~7,2%

rem US hour
set HOUR=%TIME:~0,2%
set MIN=%TIME:~3,2%
set SEC=%TIME:~6,2%
set HUNDREDS=%TIME:~9,2%
set HOURMIN=%HOUR%%MIN%

rem Make sure that hour has two digits
IF %HOUR% GEQ 10 goto twoh
set HOUR1=%TIME:~1,1%
set TWOHOUR=0%HOUR1%
goto fulltid

:twoh
set TWOHOUR=%HOUR%

:fulltid
set FULLTIME=%TWOHOUR%'%MIN%'%SEC%'%HUNDREDS%
set FTIME=%TWOHOUR%:%MIN%:%SEC%


@echo off & setLocal EnableDELAYedeXpansion
findstr /m "192.168.1" *.txt > FILENAME 
echo on
for /f "tokens=*" %%a in (*.txt ^| find "192.168.1") do (
IF %%a neq %%b (
echo Suscessful: %%a  %FILENAME%  >> Log%YEAR%%MONTH%%DAY%.txt
) ELSE (
echo Fail: Specified IP not found in %FILENAME% >> Log%YEAR%%MONTH%%DAY%.txt
)
)

goto START

rem************************************************************

1 个答案:

答案 0 :(得分:0)

  1. 您指定了无效的管道| find。您不能将(a)文本文件传输到命令中 将文件作为参数提供给find,或者使用重定向(这仅适用于单个文件,但不适用于多个文件,也不适用于* / ?模式)
  2. 您未正确使用for /f 看起来好像要解析find的输出。要实现这一点,但必须将命令括在单引号'中。输入for /?并查看帮助文本以获取更多详细信息。
  3. 以下代码行应该有效:

        for /f "tokens=*" %%a in ('find "192.168.1" *.txt') do (
    

    要获取当前日期和时间,我强烈建议您仅在单行内阅读变量%DATE%%TIME% 一次!否则,您可能会遇到问题,特别是关于小数秒,在连续扩展之间可能不相等。

    为确保%HOUR%有两位数,您只需使用set HOUR=0%HOUR%然后set HOUR=%HOUR:~-2%

    由于一位数%HOUR%在此处以空格为前缀,因此您只需将空格替换为零即可使其更简单(感谢您的comment,@ Stephan!):{ {1}}。