[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[代码合集] 如何在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:54 编辑
  1. @echo off
  2. rem 批处理和文本全部保存为ansi编码格式
  3. set "file=d:\1.txt"
  4. set /p keyword=your_keyword:
  5. set /a before=4,after=1,all=before+after
  6. for /l %%l in (1,1,%all%) do (
  7. call set "w=%%w%% "
  8. )
  9. for /f "delims=" %%a in ('find "%keyword%" ^<"%file%"') do (
  10. set str=%%a
  11. setlocal enabledelayedexpansion
  12. for /f "tokens=1-2 delims=骉" %%x in ("!w!!str:%keyword%=骉!!w!") do (
  13. endlocal
  14. set str1=%%x
  15. set str2=%%y
  16. setlocal enabledelayedexpansion
  17. echo [!str1:~-%before%!!keyword!!str2:~0,%after%!]
  18. endlocal
  19. )
  20. )
  21. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


    感谢大佬解答 可用 太帅了

TOP

本帖最后由 aloha20200628 于 2024-5-13 16:09 编辑


用本帖推演出4种题型,以示 dir / grep(可从本论坛第三方下载)/ sed(可从本论坛第三方下载) 的不同用法... 为何不用findstr?概因其测试中对某些中文字符的匹配确实不稳定
一楼示例指定前缀=4个字符,后缀=1个字符,以下各题型均采用前缀=4个字符,后缀=3个字符 更有代表性吧
  1. ::指定一个自定义关键词(亦可是一楼示例中的 2621)
  2. set "kw=xyz"
  3. ::查找每行数据中仅包含关键词及其前后缀定长字符的字段(例如前缀4个字符,后缀3个字符,以下各式同值)
  4. dir/b/a-d "????%kw%???"
  5. ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
  6. type "dir.txt"|grep -E "^.{4}%kw%.{3}$"
  7. ::查找每行数据中包含关键词及其前后缀定长字符的字段,但前缀之前不再有字符
  8. dir/b/a-d "????%kw%???*"
  9. ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
  10. type "dir.txt"|grep -E "^.{4}%kw%.{3}"
  11. ::查找每行数据中包含关键词及其前后缀定长字符的字段,但后缀之后不再有字符
  12. dir/b/a-d "*????%kw%???"
  13. ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
  14. type "dir.txt"|grep -E ".{4}%kw%.{3}$"
  15. ::从每行数据中取出包含关键词及其前后缀定长字符的字段
  16. dir/b/a-d "*%kw%*"|sed -E "s/.*(.{4}%kw%.{3}).*/\1/"
  17. ::如果 dir/b/a-d "*%kw%*">dir.txt 简报结果已存为文件dir.txt,则用下式且与上式等效
  18. type "dir.txt"|sed -E "s/.*(.{4}%kw%.{3}).*/\1/"
复制代码

TOP

返回列表