Bat批处理中的 FINDSTR用法

linux中的grep等同于win中的findstr命令。可以在txt文本中截取到有特定关键字的行,并显示出来。

 grep也可以通过关键字,在一个文件夹下查找多个有这些关键字的文件,并生成结果。

 

一、findstr命令介绍

findstr是Windows系统自带的命令,简单来说,就是根据一定的格式来查找文件中指定的行,并打印相关信息。

findstr 算是find的扩展,功能更强大,关键是还支持正则表达式。

查看下findstr命令的帮助信息

语法格式

简单格式:findstr [可选参数] 要查找的字符串 [路径\文件名]

详细格式:findstr [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file] [/C:string] [/G: file] [/D:dirlist] [/A:colorattributes] [strings] [ [drive:] [path] filename [ ... ] ]

注意点:

1.默认是查找当前目录,至少指定一个文件,当然可以同时指定多个,用空格分隔。

2.文件名可以使用通配符,例如所有文本文件,就可以写成 *.txt 。

3.详细参数列表

参数        参数说明

/B        在一行的开始配对模式。

/E        在一行的结尾配对模式。

/L        按字使用搜索字符串。

/R        将搜索字符串作为一般表达式使用。

/S        在当前目录和所有子目录中搜索匹配文件。递归查找

/I        指定搜索不分大小写。忽略大小写

/X        打印完全匹配的行。输出和搜索文本完全匹配的行

/V        只打印不包含匹配的行。匹配结果反选,只输出不包含搜索文本的行。

/N        在匹配的每行前打印行数。行号从1开始计数,即:第一行的行号是1

/M        如果文件含有匹配项,只打印其文件名。

/O        在每个匹配行前打印字符偏移量。即匹配内容的首字符在filename整个文件中出现的的字符偏移量,字符偏移量从0开始计数。

/P        忽略有不可打印字符的文件。

/OFF[LINE]        不跳过带有脱机属性集的文件。

/A:attr        指定有十六进位数字的颜色属性。请见 “color /?”

/F:file        从指定文件读文件列表 (/ 代表控制台)。

/C:string        使用指定字符串作为文字搜索字符串。查找包含空格的字符串所在行

/G:file        从指定的文件获得搜索字符串。 (/ 代表控制台)。

/D:dir        查找以分号为分隔符的目录列表

strings        要查找的文字。

[drive:][path]filename        指定要查找的文件。

 

二、例子

使用两个测试文件:

Test1.txt:

hello world

hello world boy

hello world girl

the world is over

Test2.txt:

hello world

hello world boy

hello world girl

the world is broken

1. 指定一个字符串和一个文件,打印找到的行(基本使用、单字符串搜索)

findstr "hello" D:\Test1.txt

得到的结果:

hello world

hello world boy

hello world girl

跟find命令差不多。表示在D盘下的test.txt文件中查找含有 hello这一字符串的所有行。

2、指定多个字符串和一个文件,打印找到的行(多字符串搜索)

findstr "hello world" D:\Test1.txt

得到的结果:

hello world

hello world boy

hello world girl

the world is over

表示查找含有字母 hello 或 world 的行。

这里需要注意,多个字符串通过空格区分,且都需要在""之内,如果这里没有"",第二个字符串(就是这里的world)会被当成文件名。

还有一点值得关注,即同一行只会打印一次,即使包含多个字符串。

3、指定多个字符串和多个文件,打印找到的行

findstr "hello world" D:\Test1.txt D:\Test2.txt

得到的结果:

Test1.txt:hello world

Test1.txt:hello world boy

Test1.txt:hello world girl

Test1.txt:the world is overTest2.txt:hello world

Test2.txt:hello world boy

Test2.txt:hello world girl

Test2.txt:the world is broken

所有包含hello和world的语句都被打印出来了,且在每一行的开头打印都会指定对应的文件。

4、将"hello world"作为一个整体来查找(查找带有空格的字符串)

findstr /C:"hello world" D:\Test1.txt

得到的结果:

hello world

hello world boy

hello world girl

与2相比,此处不再打印单独匹配world的行。

/C用于指定某个字符串,空格不再作为字符串的分隔符,而是作为字符串本身的一部分。如果不用参数/c:findstr "hello world" D:\Test1.txt 就会输出含有字母 hello 或 world 的行

5、只打印文件中完全匹配字符串的行

findstr /C:"hello world" /X D:\Test1.txt

得到的结果:

hello world

/X用来指定全字符串匹配的行,所以后面接了boy/girl的行都不算。

6、只打印不匹配的行

findstr /C:"hello world" /X /V D:\Test1.txt

得到的结果:

hello world boy

hello world girl

the world is over

/V之后不再打印匹配的行,而是相反。

7、findstr中的字符串支持正则表达式,可以使用/R来指定,此时字符串编程正则表达式。

findstr /R "world$" D:\Test1.txt

得到的结果:

hello world

这里的/R指定了正则表达式,而该表达式里面的$表示文件结尾,所以之类的意思就是找到文件结尾是world的字符串。

8、在当前目录及所有子目录下的所有文件中查找

findstr /s /i "hello"  *.*

在当前目录及所有子目录下(/s)的所有文件中查找"hello"这个字符串,*.* 表示所有类型的文件,同时不区分字符串的大小写(/i)。

9、正则表达式的使用

匹配纯字母的行,写法如下:

findstr /R "^[a-z]*$" D:\Test1.txt

匹配hello开头的行,写法如下:

findstr /R "^hello" D:\Test1.txt

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BAT批处理可以用来提取文件内容并替换指定文件的内容。可以使用以下方法来实现: 首先,使用以下命令来获取文件的修改时间: ``` for %%i in ("C:\Users\admin\Desktop\flag.txt") do set thisTime1=%%~ti for %%i in ("C:\Users\admin\Desktop\flag1.txt") do set thisTime2=%%~ti ``` 然后,可以使用条件语句来判断两个文件的修改时间是否相同: ``` if "%thisTime1%"=="%thisTime2%" (echo same) else (echo different) ``` 接下来,可以使用条件语句来判断哪个文件是最新的: ``` if "%thisTime1%" GTR "%thisTime2%" (echo 第一个文件新) else (echo 第二个文件新) ``` 如果你想要提取文件的内容并替换指定文件的内容,可以使用以下方法: ``` @echo off chcp 65001 for /f "tokens=1,2 delims==" %%a in ('Type conf.properties^|Findstr CLIENT_HOME') do ( set "c1=%%a" set "new=%%b" goto end ) :end ren cgame.as3proj a.txt for /f "delims=" %%i in ('findstr "CLIENT_HOME" a.txt') do ( for /f "delims=" %%j in ('type "a.txt"') do ( if %%i==%%j ( setlocal Enabledelayedexpansion set "var=%%i" set "var=!var:CLIENT_HOME=%new%!" echo !var!>>b.txt endlocal ) else echo %%j>>b.txt ) ) ren b.txt cgame.as3proj del a.txt pause ``` 这段代码会读取名为`conf.properties`的文件,找到包含`CLIENT_HOME`的行,并将其的`CLIENT_HOME`替换为`new`变量的值。然后,将替换后的内容写入名为`cgame.as3proj`的文件。 请注意,以上代码仅供参考,具体的实现方式可能需要根据你的具体需求进行调整。 #### 引用[.reference_title] - *1* *2* [window的bat批处理命令](https://blog.csdn.net/baidu_41553551/article/details/123974284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [BAT批处理提取文件内容替换指定文件内容](https://blog.csdn.net/xiangliangyu2008/article/details/82711055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值