带通配符或大于 "X" 次的 findstr
Findstr with wild card or greater than "X" Time
正在尝试将一个批处理文件放在一起,以便在文本文件中找到一个字符串。唯一的障碍是我想找到晚上 (PM) 而不是早上 (AM) 的值。
我正在尝试查找 "XBR Upload successful",但前提是存在于 PM 中:
从日志文件中提取:
[3:35:07AM] XBR 上传成功。
我有以下内容:
@echo off
findstr /M "[*PM] XBR Upload successful." C:\Test.log
if errorlevel = 1 GOTO NOMATCH
if errorlevel = 2 GOTO MATCH
通配符 * 似乎对我不起作用。似乎找到了 [*PM],即使在日志文件中还没有 PM 计时。
感谢任何指导!
你应该这样尝试:
@echo off
Set InputFile=c:\Test.log
Set OutPutFile=c:\LogFile.txt
Type "%InPutFile%" |findstr /M /R /C:"\[.*PM\] XBR Upload successful." > %OutPutFile%
If "%Errorlevel%" EQU "1" GOTO :NOMATCH
If "%Errorlevel%" EQU "0" GOTO :MATCH
:MATCH
Color 0A
echo MATCH
pause
Start "" %OutPutFile%
Exit /b
:NOMATCH
Color 0C
echo NO MATCH
pause
Exit /b
您的代码无法按预期运行,因为您误解了 *
在正则表达式中的作用。通常是量词,不是通配符。
表达式x*
表示"match 0 or more x
characters"。但是你的情况有点特殊,因为 *
出现在方括号内,所以它被解释为字符 class。 [*]
匹配 *
文字字符。
你想要的表达方式是\[.*]
.
是通配符,\
对 [
进行了转义,因此它是文字而不是字符的开头 class.
此外,如果您的搜索字符串包含空格,则必须使用 /C
选项。由于您正在执行正则表达式,因此您还需要 /R
选项来覆盖 /C
字符串文字解释行为。
findstr /R /C:"\[.*PM] XBR Upload successful." C:\Test.log >nul && goto Match || goto NoMatch
但正如其他人所指出的,您可以通过不使用任何通配符的更简单的字符串文字搜索来逃脱。
findstr /C:"PM] XBR Upload successful." C:\Test.log >nul && goto Match || goto NoMatch
正在尝试将一个批处理文件放在一起,以便在文本文件中找到一个字符串。唯一的障碍是我想找到晚上 (PM) 而不是早上 (AM) 的值。
我正在尝试查找 "XBR Upload successful",但前提是存在于 PM 中:
从日志文件中提取: [3:35:07AM] XBR 上传成功。
我有以下内容:
@echo off
findstr /M "[*PM] XBR Upload successful." C:\Test.log
if errorlevel = 1 GOTO NOMATCH
if errorlevel = 2 GOTO MATCH
通配符 * 似乎对我不起作用。似乎找到了 [*PM],即使在日志文件中还没有 PM 计时。
感谢任何指导!
你应该这样尝试:
@echo off
Set InputFile=c:\Test.log
Set OutPutFile=c:\LogFile.txt
Type "%InPutFile%" |findstr /M /R /C:"\[.*PM\] XBR Upload successful." > %OutPutFile%
If "%Errorlevel%" EQU "1" GOTO :NOMATCH
If "%Errorlevel%" EQU "0" GOTO :MATCH
:MATCH
Color 0A
echo MATCH
pause
Start "" %OutPutFile%
Exit /b
:NOMATCH
Color 0C
echo NO MATCH
pause
Exit /b
您的代码无法按预期运行,因为您误解了 *
在正则表达式中的作用。通常是量词,不是通配符。
表达式x*
表示"match 0 or more x
characters"。但是你的情况有点特殊,因为 *
出现在方括号内,所以它被解释为字符 class。 [*]
匹配 *
文字字符。
你想要的表达方式是\[.*]
.
是通配符,\
对 [
进行了转义,因此它是文字而不是字符的开头 class.
此外,如果您的搜索字符串包含空格,则必须使用 /C
选项。由于您正在执行正则表达式,因此您还需要 /R
选项来覆盖 /C
字符串文字解释行为。
findstr /R /C:"\[.*PM] XBR Upload successful." C:\Test.log >nul && goto Match || goto NoMatch
但正如其他人所指出的,您可以通过不使用任何通配符的更简单的字符串文字搜索来逃脱。
findstr /C:"PM] XBR Upload successful." C:\Test.log >nul && goto Match || goto NoMatch