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

[文本处理] 【已解决】批处理提取指定字符内容

描述:
1、需提取的是一个Cook信息,是在一行内,想提取SESSDATA=167.......0C;这段内容。
2、之前用得笨办法,是以;分隔来数SESSDATA位于第几个来提取,但现在SESSDATA值在29位,而字母只有26个,已超出范围,没法用,除非先删除一部分内容,再弄,这样挺麻烦的。
故发贴求助大佬指导!

注:以下仅举例,所有的值,均已被处理过,替换为Z...3了,实际都是不同的字符内容。知悉!
CURRENT_BLACKGAP=Z...3; hit-dyn-v2=Z...3; FEED_LIVE_VERSION=Z...3; LIVE_BUVID=Z...3; PVID=Z...3; rpdid=Z...3; buvid_fp_plain=Z...3; buvid_fp=Z...3; buvid4=Z...3; _uuid=Z...3; fingerprint=Z...3; bmg_af_switch=Z...3; CURRENT_QUALITY=Z...3; bmg_src_def_domain=Z...3; browser_resolution=Z...3; enable_web_push=Z...3; header_theme_version=Z...3; home_feed_column=Z...3; b_nut=Z...3; buvid3=Z...3; bsource_origin=Z...3; bmg_af_switch=Z...3; bmg_src_def_domain=Z...3; share_source_origin=Z...3; bili_ticket=Z...3; bili_ticket_expires=Z...3; DedeUserID=Z...3; DedeUserID__ckMd5=Z...3; SESSDATA=167.......0C; bili_jct=Z...3; sid=Z...3; bp_t_offset_330614218=Z...3; CURRENT_FNVAL=Z...3; b_lsid=Z...3; bsource=Z...3
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# 77七


  谢谢帮助!我认真看看研究下

目前我是采用下面的笨办法来的,缺点是获取的SESSDATA位置再变化,代码也要手动改,没法自动精准识别。
  1. for /f "tokens=28*" %%a in (test.txt) do (set temp1=%%b)
  2. for /f "tokens=1-2 delims=; " %%a in ('echo %temp1%') do (set cookie_SESSDATA=SESSDATA=%%b)
  3. echo %cookie_SESSDATA%;
  4. echo %cookie_SESSDATA%;>cookie2.txt
复制代码

TOP

回复 4# 77七


    非常感谢!完美解决!
我太弱了,"!str:*SESSDATA=!" 这种定位方法我都不知道。

TOP

回复 5# 77七


    5楼代码也通过,更精简了,感谢大神!

TOP

回复 5# 77七


    刚应用在实际中时,发现5楼方法不太稳定,换了个文本内容,程序就闪退了。而且原文本最后加个;,也会出错。
4楼方法稳定没问题。有这个就可以了。

TOP

本帖最后由 fzp070 于 2024-12-12 21:54 编辑

回复 8# aloha20200628


    8楼的代码直接运行是可以的,但实际运用中,发现也有问题,遇到内容中含|符号时,会获取不到或闪退,跟5楼问题一样。

    9楼的代码已试OK,代码很精简,不错。

感谢大佬指导!

TOP

回复 12# 77七


    感谢大佬指教!

刚试了下,按大佬说的操作,如果是以1楼字符,加上;或者加上|,都是可以。但以实际获得的字符,还是不行,获取为空。不过不再闪退。
不过,发现用for来获取文本,替换大佬set /p 方戒获取文本代码,反而可以了。见下
另外8楼代码,通过增加setlocal enabledelayedexpansion,也不闪退了。问题目前来看是解决了。
  1. @echo off
  2. cd /d "%~dp0"
  3. ::set /p str=<"test2.txt"&rem ---------------------------------------------------------此代码舍弃
  4. for /f "tokens=*"  %%a in (test2.txt) do (set "str=%%a") &rem -------------------------------【换成此】
  5. ::set "str=%str:;=&set %"&rem -------------------------------------------------------此代码舍弃
  6. (set "str=%str:;="&set "%") 1>nul
  7. setlocal enabledelayedexpansion
  8. set !str!
  9. ::echo !SESSDATA!
  10. set cookie_SESSDATA=SESSDATA=!SESSDATA!;
  11. echo !cookie_SESSDATA!
  12. echo !cookie_SESSDATA!>cookie3.txt
  13. TIMEOUT /T 3 /NOBREAK
  14. exit
复制代码

TOP

回复 14# aloha20200628


    感谢大佬详细指导,问题昨天都解决了,至少当前遇到的COOKie字符是没问题了。
昨天在 @77七 大神的指导下,用了 setlocal enabledelayedexpansion就可以,之前没用这变量延迟,只用双引号包括试了是不行的。grep一直都没问题。

再次感谢两位大才的热心指导。

TOP

回复 16# hfxiang


    感谢提供新方法,试了下可以。但最后缺个;号,要怎么增加呢?

TOP

回复 19# hfxiang


    可以了,非常感谢!

TOP

返回列表