找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31873|回复: 10

[文本处理] [已解决]批处理提取文本指定内容并且合并输出到新的文本里

[复制链接]
发表于 2024-4-20 11:01:08 | 显示全部楼层 |阅读模式
你好!如何用批处理提取source_code.txt文件一些内容和链接,例如提取里面的/yuzu-emu-mirror/yuzu-mainline/releases/tag/mainline-0-1732(1732数值不是固定的,可能是其它数值,这样的链接一共10个),<relative-time datetime="2024-03-02(日期不是固定的,可能是其它日期,这样内容一共10个)和yuzu-emu-mirror/yuzu-mainline/commit/d839edbda1832cfaab8e4a06d96f7783cdb63e0b(这一长串代码也不是固定的,这样的链接一样也是10个),提取后把这3个链接或者内容合并为一行并输出到新的txt文本里,请问怎么处理,谢谢!!

source_code.txt
https://pan.baidu.com/s/19BPo0Ivor430A9yXRAGlTg?pwd=6666

处理后要的结果,以此类推,一样是10个
  1. /yuzu-emu-mirror/yuzu-mainline/releases/tag/mainline-0-1732<relative-time datetime="2024-03-02/yuzu-emu-mirror/yuzu-mainline/commit/d839edbda1832cfaab8e4a06d96f7783cdb63e0b
  2. /yuzu-emu-mirror/yuzu-mainline/releases/tag/mainline-0-1731<relative-time datetime="2024-03-01/yuzu-emu-mirror/yuzu-mainline/commit/6879db1822c3c8be6e8598b3ce6762d1130b007e
  3. /yuzu-emu-mirror/yuzu-mainline/releases/tag/mainline-0-1730<relative-time datetime="2024-02-29/yuzu-emu-mirror/yuzu-mainline/commit/8dd5cd4eac9e47ee8722e2530d1db3b37bf73431
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-4-20 13:37:53 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f usebacktokens^=1-6delims^=^" %%a in ("source_code.txt") do (
  4.         if "%%a" equ "      <h2 data-view-component=" (
  5.                 set /p="%%f"<nul
  6.         ) else if "%%a" equ "        <relative-time datetime=" (
  7.                 for /f "delims=T" %%x in ("%%b") do (
  8.                         set /p="<relative-time datetime=%%x"<nul
  9.                 )
  10.         ) else if "%%a" equ "      <a class=" (
  11.                 if "%%e" equ ">" (
  12.                         echo %%d
  13.                 )
  14.         )
  15. ))>"out.txt"
  16. pause
复制代码

不知道怎么用set /p打印",我把"去掉了

评分

参与人数 1技术 +1 收起 理由
a574045075 + 1 谢谢

查看全部评分

 楼主| 发表于 2024-4-20 15:32:57 | 显示全部楼层
回复 2# 77七


    你好 不行啊 输出内容如下:
D:\1>(if "<!DOCTYPE html>" EQU "聽 聽聽 聽<h2 data-view-component=" (set /p="" 0<nul )  else if "<!DOCTYPE html>" EQU "聽 聽聽 聽聽聽<relative-time datetime=" (for /F "delims=T" %x in ("") do (set /p="<relative-time datetime=%x" 0<nul ) )  else if "<!DOCTYPE html>" EQU "聽 聽聽 聽<a class=" (if "" EQU ">" (echo  ) ) )

D:\1>(if "<html" EQU "聽 聽聽 聽<h2 data-view-component=" (set /p="" 0<nul )  else if "<html" EQU "聽 聽聽 聽聽聽<relative-time datetime=" (for /F "delims=T" %x in ("") do (set /p="<relative-time datetime=%x" 0<nul ) )  else if "<html" EQU "聽 聽聽 聽<a class=" (if "" EQU ">" (echo  ) ) )

D:\1>(if "  lang=" EQU "聽 聽聽 聽<h2 data-view-component=" (set /p="" 0<nul )  else if "  lang=" EQU "聽 聽聽 聽聽聽<relative-time datetime=" (for /F "delims=T" %x in ("en") do (set /p="<relative-time datetime=%x" 0<nul ) )  else if "  lang=" EQU "聽 聽聽 聽<a class=" (if "" EQU ">" (echo  ) ) )

D:\1>(if "  " EQU "聽 聽聽 聽<h2 data-view-component="
发表于 2024-4-20 15:50:57 | 显示全部楼层
回复 3# a574045075


   2楼代码点copy 按钮复制,代码保存为ansi或者utf-8,再试一下。我这里测试正常。
 楼主| 发表于 2024-4-20 15:56:32 | 显示全部楼层
回复 4# 77七


    运行后如下 对了 你电脑是什么系统

D:\1>锘緻echo off
'锘緻echo' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

D:\1>cd /d "D:\1\"

D:\1>(for /F usebacktokens=1-6delims=" %a in ("source_code.txt") do (if "%a" EQU
"      <h2 data-view-component=" (set /p="%f" 0<nul )  else if "%a" EQU "
  <relative-time datetime=" (for /F "delims=T" %x in ("%b") do (set /p="<relativ
e-time datetime=%x" 0<nul ) )  else if "%a" EQU "      <a class=" (if "%e" EQU "
>" (echo %d ) ) ) ) 1>"out.txt"

D:\1>pause
请按任意键继续. . .
发表于 2024-4-20 16:06:42 | 显示全部楼层
回复 5# a574045075


   win10
发表于 2024-4-20 17:27:11 | 显示全部楼层
回复 1# a574045075

第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的实现方式如下:

  1. gawk "/\/yuzu-emu-mirror\/yuzu-mainline\/releases\/tag\/mainline-0-[0-9]{4}/{printf substr($0,67,59)}/relative-time datetime=/{printf substr($0,9,35)}/\/yuzu-emu-mirror\/yuzu-mainline\/commit\//{print substr($0,36,78)}" source_code.txt>out.txt
复制代码
 楼主| 发表于 2024-4-20 17:35:03 | 显示全部楼层
回复 6# 77七


    可以用了  忘记说了 能不能把commit/后面的这串代码d839edbda1832cfaab8e4a06d96f7783cdb63e0b,我想保留前9位,也就是d839edbda,并在后面加入.zip
最后结果:
/yuzu-emu-mirror/yuzu-mainline/releases/tag/mainline-0-1732<relative-time datetime="2024-03-02/yuzu-emu-mirror/yuzu-mainline/commit/d839edbda.zip
发表于 2024-4-20 17:56:56 | 显示全部楼层
回复 8# a574045075
2楼代码第12行改为:

  
  1.                         set str=%%d
  2.                         setlocal enabledelayedexpansion
  3.                         echo !str:~0,47!.zip
  4.                         endlocal
复制代码
发表于 2024-4-20 18:02:38 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-4-20 18:10 编辑

回复 8# a574045075

也来切几刀...
用楼主提供的示例文件测试通过...

  1. @echo off &setlocal enabledelayedexpansion
  2. set "s1=/yuzu-emu-mirror/yuzu-mainline/releases/tag/"
  3. set "s2=relative-time datetime="
  4. set "s3=/yuzu-emu-mirror/yuzu-mainline/commit/"
  5. (for /f tokens^=1-6^delims^=^" %%1 in (' findstr /c:"%s1%" /c:"%s2%" /c:"%s3%" "source_code.txt" ') do (
  6.         set "s=%%~2" &set "c=!s:~,4!"
  7.         if /i "!c!"=="true" (set "v=%%~6") else if /i "!c!"=="link" (set "v4=%%~4"&echo,!v!!v4:~,-31!.zip&set "v=") else (set "v=!v!<relative-time datetime=%%~2"&set "v=!v:~,-10!")
  8. ))>"source_code.txt.new"
  9. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
a574045075 + 1 谢谢

查看全部评分

发表于 2024-4-24 15:16:21 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-4-24 17:07 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in ('findstr /l /c:"/yuzu-emu-mirror/yuzu-mainline/releases/tag" /l /c:"<relative-time datetime=" /l /c:"yuzu-emu-mirror/yuzu-mainline/commit" source_code.txt') do (
  4.     set "str1=%%i"
  5.     set "str1=!str1:>=!"
  6.     for %%j in (!str1!) do (
  7.         if "!s!"=="href" (
  8.             if not defined n (
  9.                 set "str=%%~j"
  10.                 set n=true
  11.             ) else (
  12.                 echo,!str!%%~j
  13.                 set n=
  14.             )
  15.         ) else if "!s!"=="datetime" (
  16.             set "str=!str!<relative-time datetime=%%~j"
  17.         )
  18.         set s=%%j
  19.     )
  20. ))>out.txt
  21. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:48 , Processed in 0.023249 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表