Board logo

标题: [文本处理] [已解决]求助,批处理转换json格式 [打印本页]

作者: tianzi    时间: 2021-10-9 19:24     标题: [已解决]求助,批处理转换json格式

本帖最后由 tianzi 于 2021-11-16 19:18 编辑

样本中有以下字符
达到:
1.转换的文件以标本中的字符重命名,案例中就是:笑傲江湖.EP02.2001.DVDRip.x264.AC3-CMCT.srt
2.转换的文件移动到样本后面的目录,案例中就是:D:/笑傲江湖.全40集.2001.国语无字£CMCT风潇潇/
作者: idwma    时间: 2021-10-11 19:05

本帖最后由 idwma 于 2021-10-11 23:39 编辑
  1. @powershell "type '%~0'|select -skip 1|out-string|iex"&pause&exit
  2. [IO.File]::ReadAllLines("draft_content.json") -split "{"|%{
  3.   if ($_ -match '"material_name":"(.*?)","material_url":"","path":"(.*?)"'){$name=$matches[1];$path=$matches[2]}
  4.   if ($_ -match '"content":"(.*?)"'){[array]$a+=$matches[1]}
  5.   if ($_ -match '"duration":(.*?),"start":(.*?)}'){
  6.     if ($matches[2] -ne 0){
  7.       [array]$b+=(("{0:HH:mm:ss,ff}" -f [datetime]([int64]$matches[2]*10)),("{0:HH:mm:ss,ff}" -f [datetime](([int64]$matches[2]+[int64]$matches[1])*10))) -join ' --> '
  8.     }
  9.   }
  10. }
  11. for($i=0;$i -le $a.count;$i++){
  12.   $c+=($i+1),$b[$i],$a[$i],"",""
  13. }
  14. $c>([io.path]::GetDirectoryName($path)+"\"+[io.path]::GetFileNameWithoutExtension($path)+".srt")
复制代码

作者: tianzi    时间: 2021-10-15 22:15


有弹出提示
作者: idwma    时间: 2021-10-15 23:33

回复 3# tianzi


    路径目录和json文件里的不一样?
作者: tianzi    时间: 2021-10-16 00:36

本帖最后由 tianzi 于 2021-10-16 00:52 编辑

我明白了,是因为刚才那个测试的目录名是繁体字,所以报错
作者: idwma    时间: 2021-10-16 00:40

回复 5# tianzi


    多发几个不行的样本来测试一下
作者: tianzi    时间: 2021-10-16 00:53

回复 6# idwma


    我明白了,是因为刚才那个测试的目录名是繁体字,所以报错
作者: tianzi    时间: 2021-10-16 01:02

本帖最后由 tianzi 于 2021-10-16 01:27 编辑

回复 6# idwma


   可以增加一个细节吗?若存在同名文件,则保留并从2开始编号,依次下去,因为同一个视频因为时长原因,可能分多次转换


另外,时间轴跟软件在毫秒位处有差异


作者: idwma    时间: 2021-10-16 16:32

回复 8# tianzi


    时间是直接用json文件里的值,有差异就不知道了
作者: tianzi    时间: 2021-10-16 17:08

回复 9# idwma


    可以增加一个细节吗?若存在同名文件,则保留并从2开始编号,依次下去,因为同一个视频因为时长原因,可能分多次转换
作者: idwma    时间: 2021-10-16 18:25

回复 10# tianzi

用时间简单点
  1. @powershell "type '%~0'|select -skip 1|out-string|iex"&pause&exit
  2. [IO.File]::ReadAllLines("draft_content.json") -split "{"|%{
  3.   if ($_ -match '"material_name":"(.*?)","material_url":"","path":"(.*?)"'){$name=$matches[1];$path=$matches[2]}
  4.   if ($_ -match '"content":"(.*?)"'){[array]$a+=$matches[1]}
  5.   if ($_ -match '"duration":(.*?),"start":(.*?)}'){
  6.     if ($matches[2] -ne 0){
  7.       [array]$b+=(("{0:HH:mm:ss,ff}" -f [datetime]([int64]$matches[2]*10)),("{0:HH:mm:ss,ff}" -f [datetime](([int64]$matches[2]+[int64]$matches[1])*10))) -join ' --> '
  8.     }
  9.   }
  10. }
  11. for($i=0;$i -le $a.count;$i++){
  12.   $c+=($i+1),$b[$i],$a[$i],"",""
  13. }
  14. $d=[io.path]::GetDirectoryName($path)+"\"+[io.path]::GetFileNameWithoutExtension($path)+".srt"
  15. if(test-path $d){$c>([io.path]::GetDirectoryName($path)+"\"+[io.path]::GetFileNameWithoutExtension($path)+("{0:HH.mm.ss}" -f (get-date))+".srt")}else{$c>$d}
复制代码

作者: tianzi    时间: 2021-10-16 20:23

回复 11# idwma


    太感谢了!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2