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

[文本处理] [已解决]求助,批处理转换json格式

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

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

回复 11# idwma


    太感谢了!

TOP

回复 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}
复制代码

TOP

回复 9# idwma


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

TOP

回复 8# tianzi


    时间是直接用json文件里的值,有差异就不知道了

TOP

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

回复 6# idwma


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


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

TOP

回复 6# idwma


    我明白了,是因为刚才那个测试的目录名是繁体字,所以报错

TOP

回复 5# tianzi


    多发几个不行的样本来测试一下

TOP

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

我明白了,是因为刚才那个测试的目录名是繁体字,所以报错

TOP

回复 3# tianzi


    路径目录和json文件里的不一样?

TOP


有弹出提示

TOP

本帖最后由 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")
复制代码

TOP

返回列表