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

[文本处理] 【已解决】求助批处理提取JSON文件内特定文字后的信息

基本情况:
文件是JSON,用记事本打开后,如下:(似乎是没有行的概念,整个文本就是一行/段)

[{"id":"e2e2ed190348ed30802f6f08f4f5c1b9","title":"中国证券监督管理委员会人才引进","enabled":1,"is_cloud_task":0,"url":"http://www.csrc.gov.cn/csrc/c100082/common_list.shtml?channelid=59b9842485ba41adad957f55cb90be52","icon":"http://www.csrc.gov.cn/favicon.ico","page":"","path":"div:nth-of-type(4)","ignore_path":"","click_path":"","data_path":"","scroll_down":"0","type":"dom","code":"200","json_query":"","json_header":"","json_data":"","json_data_format":"form","rss_field":"title","star":0,"ua":"","puppeteer_code":"","browser_code":"","shell_type":"javascript","shell_cookie_name":"COOKIE","shell_code":"","ai_prompt_on":"off","ai_prompt_user":"请提取返回值中的价格,并以数字形式返回。注意只返回数字,不要返回多余内容。返回值如下:{{value}}","replace_from_regex":"","replace_to_regex":"","tab_activity":"background","interval":"720","delay":"0","retry":10,"cron":"* * * * *".........(省略,此内容与上面的不重复)"last_time":1715225597400,"retry_times":0},{"id":"b96d4b076418874b2291e99362e86bf9","title":"重要通知-商务部外贸发展局","enabled":1,"is_cloud_task":0,"url":"https://www.tdb.org.cn/zytz/index.jhtml","icon":"https://www.tdb.org.cn/r/cms/www/default/img/favicon.ico","page":"","path":"div > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(2) > div > ul","ignore_path":"","click_path":"","data_path":"","scroll_down":"0","type":"dom","code":"200","json_query":"","json_header":"","json_data":"","json_data_format":"form","rss_field":"title","star":0,"ua":"","puppeteer_code":"","browser_code":"","shell_type":"javascript","shell_cookie_name":"COOKIE","shell_code":"","ai_prompt_on":"off","ai_prompt_user":"请提取返回值中的价格,并以数字形式返回。注意只返回数字,不要返回多余内容。返回值如下:{{value}}","replace_from_regex":"","replace_to_regex".........(省略,此内容与上面的不重复)

具体要求:
1、提取,"title":后面的双引号内文字(不需要双引号)。
2、提取,"url":后面的双引号内网址(不需要双引号)。
3、以上两个提取内容之间加上一个空格以分隔。
4、提取文字及其后网址后,另起一行来提取下一个。
5、在每一行前面加上三位数的行号,以001开始(即不足三位则前面补0);同时加一个空格分开。
    按上述,则提取后文字为:
001 中国证券监督管理委员会人才引进 http://www.csrc.gov.cn/csrc/c100082/common_list.shtml?channelid=59b9842485ba41adad957f55cb90be52
002 重要通知-商务部外贸发展局 https://www.tdb.org.cn/zytz/index.jhtml


6、最后在同级文件夹内生成相应TXT文件,以原文件名加上“内容提取”这四个字来重命名。比如原文件为“ABC.JSON”,则生成“ABC内容提取.txt”
7、最好是能把JSON拖到BAT文件上就能完成提取。

请大家帮忙一个!
谢谢!


网盘下载:
链接:https://pan.baidu.com/s/1BJ-6N2KLgoPIXCDMhU-HHA?pwd=4188
提取码:4188
--来自百度网盘超级会员V9的分享
1

评分人数

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

发文件
用 powershell 可行

TOP

回复 2# newswan

已上传至百度网盘。

TOP

回复 1# annwayili

用gawk5.1.0( http://bcn.bathome.net/tool/5.1.0/gawk.exe 经测试,只有这个链接的版本可实现,其它版本测试有问题)的实现方式如下:
  1. gawk -v"RS=," -F"\042" "/\042title\042:\042/{A=$4}/\042url\042:\042/{if(A)print A,$4;A=\"\"}" Check.17152.json>link_out.txt
复制代码

TOP

回复 1# annwayili
如需行号,请用如下gawk5.1.0( http://bcn.bathome.net/tool/5.1.0/gawk.exe )脚本:
  1. gawk -v"RS=," -F"\042" "/\042title\042:\042/{A=$4}/\042url\042:\042/{if(A)printf\"\04503d \045s \045s\n\",++i,A,$4;A=\"\"}" Check.17152.json>link_out.txt
复制代码
1

评分人数

TOP

本帖最后由 annwayili 于 2024-5-31 18:20 编辑

回复 5# hfxiang


    谢谢!

    系统WIN11X64,  改为下载gawk64程序了。

TOP

按要求7方式执行
  1. @echo off
  2. rem "批处理保存为utf-8编码格式"
  3. chcp 65001 >nul
  4. for %%i in (%*) do (
  5. if exist "%%~i" (
  6. set n=
  7. (for /f tokens^=2^,8^,10delims^=^" %%a in ('powershell -c "(Get-Content '%%~i' -Encoding UTF8) -replace 'title', [Environment]::NewLine"') do (
  8. if /i "%%b" equ "url" (
  9. set /a n+=1001
  10. call echo %%n:~-3%% %%a %%c
  11. )
  12. ))>"%%~ni内容提取.txt"
  13. )
  14. )
  15. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

本帖最后由 annwayili 于 2024-5-31 17:53 编辑

回复 7# 77七


    非常好!
    十分感谢!



补充一下,发现了一个小问题:
---有两个json文件生成的TXT,分别是从002、003打头开始
    显然,BAT是正确识别了JSON前面还有要提取的内容
    但不知为什么,不是从001开始。
    这两个生成的TXT都是207行,实际应该是208行和209行才对。(再多的就没有试了,因为当前最大就是这两个文件了。)
---比上面两个文件稍小的JSON生成的TXT,正确地从001开始,至204行正确结束。
---其它文件更小一点,都正确生成。

TOP

本帖最后由 buyiyang 于 2024-5-31 18:05 编辑

5楼的代码用cmd执行,

这是powershell代码:
  1. dir *.json|ForEach-Object{$i=0;(gc $_ -Encoding UTF8 |ConvertFrom-Json).checks.foreach({"{0:D3} {1} {2}"  -f ++$i,$_.title,$_.url})|sc ($_.BaseName+'内容提取.txt')}
复制代码
1

评分人数

TOP

本帖最后由 annwayili 于 2024-5-31 18:12 编辑

回复 9# buyiyang


谢谢帮助! 这个powershell代码很好用!

把gawk64.exe复制到同一文件夹内,用CMD运行5楼的脚本,也成功生成正确内容的link_out文本文档了

TOP

回复 10# annwayili


    9楼代码有个小问题,改了一下。
用gawk注意gawk.exe要在cmd工作目录。

TOP

回复 11# buyiyang


    再次感谢!刚好也复制程序去操作了

TOP

回复 8# annwayili


   应该是文本没那么规律。用其它脚本就好。
bat小白,请多指教!谢谢!

TOP

回复 13# 77七


    效果很不错了!拖曳很方便!!

TOP

返回列表