标题: [代码合集] 如何在bat内搜索到你输入的关键字,并显示关键字前面后面几位字符 [打印本页]
作者: lzpiheing 时间: 2024-5-12 17:28 标题: 如何在bat内搜索到你输入的关键字,并显示关键字前面后面几位字符
本帖最后由 lzpiheing 于 2024-5-12 17:51 编辑
百度的批处理 无法运行,想实现比如输入2621 搜索当前到并显示出 MX-C2621R
@echo on
setlocal enabledelayedexpansion
set /p keyword=your_keyword:
set /a before=4
:: 关键字前的字符数
set /a after=1
:: 关键字后的字符数
for /F "delims=" %%i in (%0) do (
set line=%%b
set start=!line:~0,%before%!
set end=!line:~-%after%!
echo Found: !start!%keyword%!end!
)
endlocal
作者: 77七 时间: 2024-5-12 18:19
本帖最后由 77七 于 2024-5-12 18:54 编辑
- @echo off
- rem 批处理和文本全部保存为ansi编码格式
-
- set "file=d:\1.txt"
-
- set /p keyword=your_keyword:
- set /a before=4,after=1,all=before+after
- for /l %%l in (1,1,%all%) do (
- call set "w=%%w%% "
- )
- for /f "delims=" %%a in ('find "%keyword%" ^<"%file%"') do (
- set str=%%a
- setlocal enabledelayedexpansion
- for /f "tokens=1-2 delims=骉" %%x in ("!w!!str:%keyword%=骉!!w!") do (
- endlocal
- set str1=%%x
- set str2=%%y
- setlocal enabledelayedexpansion
- echo [!str1:~-%before%!!keyword!!str2:~0,%after%!]
- endlocal
- )
- )
- pause
复制代码
作者: lzpiheing 时间: 2024-5-12 20:54
回复 2# 77七
感谢大佬解答 可用 太帅了
作者: aloha20200628 时间: 2024-5-13 15:52
本帖最后由 aloha20200628 于 2024-5-13 16:09 编辑
用本帖推演出4种题型,以示 dir / grep(可从本论坛第三方下载)/ sed(可从本论坛第三方下载) 的不同用法... 为何不用findstr?概因其测试中对某些中文字符的匹配确实不稳定
一楼示例指定前缀=4个字符,后缀=1个字符,以下各题型均采用前缀=4个字符,后缀=3个字符 更有代表性吧- ::指定一个自定义关键词(亦可是一楼示例中的 2621)
- set "kw=xyz"
- ::查找每行数据中仅包含关键词及其前后缀定长字符的字段(例如前缀4个字符,后缀3个字符,以下各式同值)
- dir/b/a-d "????%kw%???"
- ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
- type "dir.txt"|grep -E "^.{4}%kw%.{3}$"
-
- ::查找每行数据中包含关键词及其前后缀定长字符的字段,但前缀之前不再有字符
- dir/b/a-d "????%kw%???*"
- ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
- type "dir.txt"|grep -E "^.{4}%kw%.{3}"
-
- ::查找每行数据中包含关键词及其前后缀定长字符的字段,但后缀之后不再有字符
- dir/b/a-d "*????%kw%???"
- ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
- type "dir.txt"|grep -E ".{4}%kw%.{3}$"
-
- ::从每行数据中取出包含关键词及其前后缀定长字符的字段
- dir/b/a-d "*%kw%*"|sed -E "s/.*(.{4}%kw%.{3}).*/\1/"
- ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
- type "dir.txt"|sed -E "s/.*(.{4}%kw%.{3}).*/\1/"
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |