[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
保存为bat,用记事本打开后会变成utf-8格式,“源”变成乱码,不知道是否传说中的“联通”问题vbs,保存为u ...
apang 发表于 2014-1-4 14:21



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

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批处理如何处理文本内容,按固定格式分类存放文件?

本帖最后由 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

本帖最后由 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

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 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

膜拜你,大神,谢谢!!

TOP

  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

返回列表