Batch file 查找最新文件并搜索字符串
我有一个文件夹中的文本文件列表,我想:Batch file 查找最新文件并搜索字符串,batch-file,cmd,Batch File,Cmd,我有一个文件夹中的文本文件列表,我想: 在文件夹中查找最新的文件 在最新文件中,找到字符串=“Error” 使用string=“Error”复制整行 如果发现多个错误,请同时复制它 下面的脚本很简单,我对批处理脚本很陌生,能帮我更正使其正常工作吗 set today=%date:~10,4%%date:~4,2%%date:~7,2% set today_day=%date:~7,2% set today_year=%date:~10,4% set today_month=%date:~4,2%
set today=%date:~10,4%%date:~4,2%%date:~7,2%
set today_day=%date:~7,2%
set today_year=%date:~10,4%
set today_month=%date:~4,2%
set log_path=C:\path\Log\
set string=Error
FOR /F "delims=" %%I IN ('DIR %log_path%\*.* /A:-D /O:-D /B') do set LATEST=%%I
If findstr /I /R /C:"%string%" %%I Do
Echo Copy the Error Message row
Else exit
你想起来容易一点。(如果逻辑根本不起作用,您的
)
dir
只按相反的日期顺序生成文件名,因此第一个文件是所需的最新文件。此名称已分配给%%I
然后,findstr
将定位所需字符串,作为文件中的文本(/L
);由于dir
命令上的/B
开关仅提供名称,因此需要从目录中组合名称。加引号以允许目标路径包含分隔符
就我个人而言,我省略了路径名中的结尾\
,并在需要的地方插入它们。由于您已将终端\
包含在变量中,因此您的代码将把两个\
串在一起。其他答案已经显示了如何在目录(,)中查找最新(上次修改)的文件:
设置“字符串=错误”
设置“log\u path=C:\path\log”
对于/F“delims=eol=|”%%F英寸('
目录/B/A:-D/O:D“%log\u path%\*.*”
""做"(
设置“最新=%%F”
)
findstr/I/R/C:“\”“%log\u path%\%latest%”
findstr
命令行以不区分大小写的方式返回包含单词Error
的所有行(/I
)。搜索字符串中的\
表示单词边界,因此搜索字符串必须是单个单词,因此字符串Errors
不构成匹配。这仅在正则表达式搜索(/R
)完成时有效,这意味着您必须通过在搜索字符串前面加上\
来转义某些元字符,如
、^
、$
、]
和\
,以逐字处理。如果希望
错误
构成匹配,请删除/R
或将其替换为/L
以强制文字搜索
如果要将findstr
的输出写入文件,请使用:
findstr/I/R/C:“\”“%log\u path%\%latest%”>“error\u log.txt”
不要!“复制整行”是什么意思?你想把它复制到哪里?档案?
FOR /F "delims=" %%I IN ('DIR %log_path%\*.* /A:-D /O:D /B') do set "LATEST=%%~fI"
findstr /I /R /C:"%string%" "%LATEST%"
...
FOR /F "delims=" %%I IN ('DIR %log_path%*.* /A:-D /O:-D /B') do (
findstr /I /L /C:"%string%" "%log_path%%%I"
goto done
)
echo none found!
:done