批处理脚本以查找特定行中的最后一个单词


1

我有一个包含2行句子的文本文件。在第二行的结尾,我有一个字说“ 活着”。它可以是活着的,也可以是沮丧的。

现在,我必须编写一个IF语句,以便如果该文本文件包含Alive,则应打印Hi,否则应打印Hello。这需要使用批处理文件来完成。


阅读以下文章:stackoverflow.com/questions/130116/…。您必须让它为您工作
Ankur140290 2013年

Answers:


2
@echo off
findstr /N . input.txt | findstr /I ^2.*alive$ > NUL    
IF %ERRORLEVEL% EQU 0 (Echo Hi) ELSE (Echo Hello)
pause

该批次使用/N开关读取文本文件,并在每行前放置一个数字,例如:

1:This is a test,
2:and I am alive
3:Not?

新文本将通过管道传递到第二个findstr,后者使用RegEx模式^2.*alive$查找以开头2和结尾的行alive。那是困难的部分。

由于如果找到至少一个匹配项,则findstr会将其错误级别设置为0,因此我们可以使用简单的IF语句来回显“ Hi”或“ Hello”。


详细批处理

  • findstr在文件中搜索字符串
  • /N 在每行前面放置一个行号
  • .是任何单个字符的通配符。它告诉findstr搜索所有内容
  • |是管道命令。第一个命令的输出作为第二个命令的输入传递
  • /I告诉findstr搜索不区分大小写的字符串,因此同时找到了“ Alive”和“ alive”
  • ^ 是RegEx术语,代表一行开始
  • .* 是RegEx术语,代表不确定数量的字符
  • $ 是RegEx术语,代表行尾
  • > NUL隐藏findstr输出,以便在CMD窗口中不显示匹配的行
  • IF condition (command) ELSE (command)是一个简单的中频条件
  • %ERRORLEVEL% EQU 0是findstr 的退出代码。“ EQU”代表“ equal”

编辑示例摘自以下OP'评论)

在此处输入图片说明

  1. 您的“活着”不在第二行。它的第五
  2. 在您的示例中,“活着”之后是三个空格,因此alive$不匹配

    更改^2.*alive$5.*alive。甚至更好地^5.* Alive $
    注意空格。


嗨,我已经尝试过上面的命令,但是错误级别是1。所以它总是在获取Hello。
user284262

嗨,我已经尝试过上面的命令,但是错误级别为1。所以它总是在获取Hello.Text文件,如下所示:oabcdefghijklmnop1 | Oabcdefghijklmno2〜| 8496 | 活着的coreapplication_obijh1 | Oabcdefghijklmno3〜| 8400 | 生存cabcdefghijklmnop2 | Oabcdefghijklmno4〜| 9092 | 活着的coreapplication_obis1 | Oabcdefghijklmno5〜| 10268 | 活着
user284262

将您的日志文件粘贴到pastebinnotepad.cc并在此处发布链接。我猜您的搜索字词“活着”还不是第二行的结尾
nixda

实例中的进程:instance2 --------------------------------- + ----------- --------- + --------- + --------- ias-component | 流程类型| pid | 状态--------------------------------- + --------------- ----- + --------- + --------- coreapplication_obijh1 | OracleBIJavaHostC〜| 8400 | 活着
user284262

上面的是我的文件,我必须检查Alive或down,当前它显示Alive。
user284262
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.