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

[文本处理] [已解决]批处理如何根据文本内的指定字符串将相关内容生成txt文本并分类存?

本帖最后由 pcl_test 于 2016-7-3 19:47 编辑

我有个“频道列表.txt”文件,文件内容如下
{央视频道}
CCTV1综合,218.24.47.44/CCTV1.m3u8
CCTV1综合,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv1&type=ipad
CCTV1综合,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv1&type=ipad
CCTV1综合,rtmp.cntv.lxdns.com/live/cctv1/playlist.m3u8
CCTV2财经,218.24.47.44/CCTV2.m3u8
CCTV2财经,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv2&type=ipad
CCTV2财经,218.24.47.44/CCTV2.m3u8
CCTV2财经,rtmp.cntv.lxdns.com/live/cctv2/playlist.m3u8
CCTV3综艺,stream1.gzcbn.tv:1935/app_2/ls_3.stream/playlsit.m3u8?session=jyb321123
CCTV3综艺,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv3&type=ipad
CCTV3综艺,116.199.127.68/cctv3
CCTV3综艺,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv3&type=ipad
{地方卫视}
北京卫视,live.gslb.letv.com/gslb?stream_id=bjws&tag=live&ext=m3u8&sign=live_tv
北京卫视,tvie01.ucatv.com.cn/channels/xjyx/BeiJing-HD-Suma/flv:BJ_HD_Suma
北京卫视,web-play.pptv.com/web-m3u8-300166.m3u8?type=m3u8.web.pad
东方卫视,zb.v.qq.com:1863/?progid=3900155972
东方卫视,live.gslb.letv.com/gslb?stream_id=dongfang&tag=live&ext=m3u8&sign=live_tv
广东卫视,zb.v.qq.com:1863/?progid=857894899
广东卫视,zb.v.qq.com:1863/?progid=857894899
广东卫视,live.gslb.letv.com/gslb?stream_id=guangdong&tag=live&ext=m3u8&sign=live_tv

通过批处理遍历“频道列表.txt”文件,实现如下功能:
1、遇见中括号内的内容如“{央视频道}”,就通过批处理新建“央视频道”的文件夹,并把此类别下的链接生成txt文件,存放到分类文件夹下
2、然后分类的内容如“CCTV1综合,218.24.47.44/CCTV1.m3u8”就生成“CCTV1综合.txt”文件,“CCTV1综合.txt”文件内容为“218.24.47.44/CCTV1.m3u8”
3、由于分类包含的内容有重复,如“CCTV1综合”,遇到第2个重复的即在生成的"CCTV1综合.txt"后面自动累加个数字“_1”变成"CCTV1综合_1.txt",以此类推,第3个就变成"CCTV1综合_2.txt"

请各位朋友们帮忙看看如何写,谢谢!
1

评分人数

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

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in (List.txt) do (
  3.     set "str=%%a"
  4.     if "!str:~,1!"=="{" (
  5.         if "!str:~-1!"=="}" set "fd=!str:~1,-1!"
  6.     ) else (
  7.         if defined fd if not exist "!fd!\" md "!fd!\"
  8.         for /f "tokens=1*delims=," %%b in ("%%a") do (
  9.             set "Name=%%b" & set "url=%%c" & set "n="
  10.             call :Lp "!Name!"
  11.         )
  12.     )
  13. )
  14. pause & exit /b
  15. :Lp
  16. if exist "!fd!\!Name!.txt" set /a n+=1 & set "Name=%~1_!n!" & goto :Lp
  17. echo,!url!>"!fd!\!Name!.txt"
复制代码

TOP

膜拜你,大神,谢谢!!

TOP

本帖最后由 apang 于 2014-1-3 18:24 编辑

来个vbs,不call了
  1. Set fso = Createobject("Scripting.FileSystemObject")
  2. Set file = fso.OpenTextFile("List.txt")
  3. Do Until file.AtEndOfStream
  4.     strLine = Trim(file.ReadLine)
  5.     If Left(strLine,1) = "{" and Right(strLine,1) = "}" Then
  6.         strFD = Mid(strLine,2,Len(strLine)-2)
  7.         If Not fso.FolderExists(strFD) Then
  8.             fso.CreateFolder strFD
  9.         End If
  10.     ElseIf strLine <> "" Then
  11.         strName = Left(strLine,InStr(strLine,",")-1)
  12.         strUrl = Right(strLine,Len(strLine)-InStr(strLine,","))
  13.         strNewName = strName & ".txt"
  14.         i = 0
  15.         while fso.FileExists(strFD & "\" & strNewName)
  16.             i = i + 1
  17.             strNewName = strName & "_" & i & ".txt"
  18.         wend
  19.         fso.CreateTextFile(strFD & "\" & strNewName,true).Write strUrl
  20.     End If
  21. Loop
复制代码

TOP

apang 发表于 2014-1-3 15:54



    你这个可以不用call吗?或者
  1. if exist "!fd!\!Name!.txt" set /a n+=1 & set "Name=%~1_!n!" & goto :Lp
  2. echo,!url!>"!fd!\!Name!.txt"
复制代码
这一段能解释一下吗?
初九的冬天

TOP

本帖最后由 apang 于 2014-1-3 19:06 编辑

回复 5# 1270697389


    不用call没想到好办法,以下代码文件名(如:CCTV1综合)不能含空格,也不能含!符号。
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in (List.txt) do (
  3.     set "str=%%a"
  4.     if "!str:~,1!"=="{" (
  5.         if "!str:~-1!"=="}" set "fd=!str:~1,-1!"
  6.     ) else (
  7.         if defined fd (
  8.             if not exist "!fd!\" md "!fd!\"
  9.             for /f "tokens=1*delims=," %%b in ("%%a") do (
  10.                 if not defined .%%b (
  11.                     set ".%%b=0" & echo,%%c>"!fd!\%%b.txt"
  12.                 ) else set /a .%%b+=1 & echo,%%c>"!fd!\%%b_!.%%b!.txt"
  13.             )
  14.         )
  15.     )
  16. )
  17. pause
复制代码
2

评分人数

TOP

【已解决】BAT批处理如何处理文本内容,按固定格式分类存放文件?

本帖最后由 hbb 于 2014-1-4 21:56 编辑

我有个“频道列表.txt”文件,文件内容如下
{央视频道}
CCTV1综合,218.24.47.44/CCTV1.m3u8
CCTV1综合,218.24.47.44/CCTV1.m3u9
CCTV1综合,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv1&type=ipad
CCTV1综合,rtmp.cntv.lxdns.com/live/cctv1/playlist.m3u8
CCTV2财经,218.24.47.44/CCTV2.m3u8
CCTV2财经,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv2&type=ipad
CCTV2财经,218.24.47.44/CCTV2.m3u8
CCTV2财经,rtmp.cntv.lxdns.com/live/cctv2/playlist.m3u8
CCTV3综艺,stream1.gzcbn.tv:1935/app_2/ls_3.stream/playlsit.m3u8?session=jyb321123
CCTV3综艺,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv3&type=ipad
CCTV3综艺,116.199.127.68/cctv3
CCTV3综艺,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctv3&type=ipad
{地方卫视}
北京卫视,live.gslb.letv.com/gslb?stream_id=bjws&tag=live&ext=m3u8&sign=live_tv
北京卫视,tvie01.ucatv.com.cn/channels/xjyx/BeiJing-HD-Suma/flv:BJ_HD_Suma
北京卫视,web-play.pptv.com/web-m3u8-300166.m3u8?type=m3u8.web.pad
东方卫视,zb.v.qq.com:1863/?progid=3900155972
东方卫视,live.gslb.letv.com/gslb?stream_id=dongfang&tag=live&ext=m3u8&sign=live_tv
广东卫视,zb.v.qq.com:1863/?progid=857894899
广东卫视,zb.v.qq.com:1863/?progid=857894899
广东卫视,live.gslb.letv.com/gslb?stream_id=guangdong&tag=live&ext=m3u8&sign=live_tv

通过批处理遍历“频道列表.txt”文件,实现如下功能:
1、遇见中括号内的内容如“{央视频道}”,就通过批处理新建“央视频道”的文件夹,并把此类别下的链接生成txt文件,存放到分类文件夹下
2、然后分类的内容如“CCTV1综合,218.24.47.44/CCTV1.m3u8”就生成“CCTV1综合.txt”文件,“CCTV1综合.txt”文件内容为
“<Entry> <Title>CCTV1综合_源01</Title> <Ref href = "218.24.47.44/CCTV1.m3u8"/> </Entry>”
3、由于分类包含的内容有重复,如“CCTV1综合”,遇到第2个重复的即在生成的"CCTV1综合.txt"文件内容中添加新的行
“<Entry> <Title>CCTV1综合_源02</Title> <Ref href = "218.24.47.44/CCTV1.m3u9"/> </Entry>”
格式中,源的数字是自动累加的,由“CCTV1综合_源01”变成"CCTV1综合_源02",以此类推,第3个就变成"CCTV1综合_源03"

最后生成的“CCTV1综合.txt”文本内容格式如下:
<Entry> <Title>CCTV1综合_源01</Title> <Ref href = "218.24.47.44/CCTV1.m3u8"/> </Entry>
<Entry> <Title>CCTV1综合_源02</Title> <Ref href = "218.24.47.44/CCTV1.m3u9"/> </Entry>
.................以此类推

请各位朋友们帮忙看看如何写,谢谢!

TOP

保存为bat,用记事本打开后会变成utf-8格式,“源”变成乱码,不知道是否传说中的“联通”问题
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in (List.txt) do (
  3.     set "str=%%a"
  4.     if "!str:~,1!"=="{" (
  5.         if "!str:~-1!"=="}" set "fd=!str:~1,-1!" & md "!fd!\" 2>nul
  6.     ) else (
  7.         for /f "tokens=1*delims=," %%b in ("!str!") do (
  8.             set /a ".!fd!.%%b+=1"
  9.             for %%d in (!fd!) do set "a=00!.%%d.%%b!"
  10.             >>"!fd!\%%b.txt" echo,^<Entry^> ^<Title^>%%b_源!a:~-2!^</Title^> ^<Ref href = "%%c"/^> ^</Entry^>
  11.         )
  12.     )
  13. )
  14. pause
复制代码
vbs,保存为unicode格式好了
  1. Set fso = Createobject("Scripting.FileSystemObject")
  2. Set dic = CreateObject("Scripting.Dictionary")
  3. Set file = fso.OpenTextFile("List.txt")
  4. Do Until file.AtEndOfStream
  5.     strLine = Trim(file.ReadLine)
  6.     If Left(strLine,1) = "{" and Right(strLine,1) = "}" Then
  7.         strFD = Mid(strLine,2,Len(strLine)-2)
  8.         If Not fso.FolderExists(strFD) Then
  9.             fso.CreateFolder strFD
  10.         End If
  11.     ElseIf strLine <> "" Then
  12.         strName = Left(strLine,InStr(strLine,",")-1)
  13.         strUrl = Right(strLine,Len(strLine)-InStr(strLine,","))
  14.         strKey = strFD & "\" & strName
  15.         If dic.Exists(strKey) Then
  16.             dic.Item(strKey) = dic.Item(strKey) + 1
  17.         Else dic.Add strKey,101
  18.         End If
  19.         s = "_源" & Right(dic.Item(strKey),2)
  20.         s = "<Entry> <Title>" & strName & s & "</Title> <Ref href = "
  21.         s = s & chr(34) & strUrl & chr(34) &"/> </Entry>"
  22.         fso.OpenTextFile(strKey & ".txt",8,true).WriteLine s
  23.     End If
  24. Loop
复制代码

TOP

保存为bat,用记事本打开后会变成utf-8格式,“源”变成乱码,不知道是否传说中的“联通”问题vbs,保存为u ...
apang 发表于 2014-1-4 14:21



    你的bat没有问题,要保存为ANSI格式的bat就没有问题了。
初九的冬天

TOP

回复 2# apang
我上次遇到的是  "系统" 两字
应该是编码问题

TOP

本帖最后由 hbb 于 2014-1-4 17:48 编辑

首先感谢apang大神的热心解答,在使用过程中,出现了如下问题,执行bat批处理时,list.txt文本包含如下内容:

{央视频道}
CCTV4中文国际(亚洲),live.gslb.letv.com/gslb?stream_id=cctv4&tag=live&ext=m3u8&sign=live_tv
CCTV5+体育赛事,vdn.apps.cntv.cn/api/getLiveUrlCommonRedirectApi.do?channel=pa://cctv_p2p_hdcctvgaoqing&type=ipad

的时候报如下错误:
运算符不存在。
找不到操作数。
请按任意键继续. . .

执行完后,源的数字会变成00,请问如何解决,谢谢!

TOP

回复 2# apang


   高手能不能解释一下 set /a ".!fd!.%%b+=1"中的.号的作用啊,头都想炸了

TOP

回复 4# terse


    确实。
愚蠢的notepad.exe,我再多加一行中文注释就不乱码了:Rem 嘿嘿

TOP

回复 5# hbb


    批处理这样写是没有考虑通用性的,如果你不讨厌vbs的话,试试第二个代码

TOP

回复 8# apang


    vbs运行也会报错,不太懂,不方便调试,不知apang兄能再调一调bat吗?谢谢!

TOP

返回列表