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

[文本处理] 把文本文件中按行加入另外文本文件中写一个批处理程序

如题要求,求大佬帮忙哈5行文本1
Legend has it that,
among the mountains in southwestern China,
there lives “four girls".
To protect the villagers here,
they fought against fierce demons
and transformed into four mountains finally.

文本2也是5段
1
00:00:04,458 --> 00:00:05,291
相传

2
00:00:05,833 --> 00:00:08,041
在中国西南的群山中

3
00:00:08,041 --> 00:00:09,708
生活着“四位姑娘’

4
00:00:10,166 --> 00:00:12,208
她们为保护这里的村民

5
00:00:12,208 --> 00:00:14,083
与凶猛的妖魔对战
运行后效果
1
00:00:04,458 --> 00:00:05,291
相传
Legend has it that,

2
00:00:05,833 --> 00:00:08,041
在中国西南的群山中
among the mountains in southwestern China,

3
00:00:08,041 --> 00:00:09,708
生活着“四位姑娘’
there lives “four girls".

4
00:00:10,166 --> 00:00:12,208
她们为保护这里的村民
To protect the villagers here,

5
00:00:12,208 --> 00:00:14,083
与凶猛的妖魔对战
they fought against fierce demons
也可以说是某文本内容逐行按序插入srt字幕文件中,以形成双语字幕效果
实际文本行数随机
但是文本行数和字幕段数是相等的

需求没看懂

TOP

期待大佬解决难题,小厮这厢有礼了

TOP

需求没看懂
new_user 发表于 2025-1-3 12:59

文本每一行插入到字幕文件四倍行空行中就行
文本1.txt内n行,文本2.srt是带时间抽的字幕文件。1.txt文件内容有n行字符,2.srt也有n段(每一段一段为3行,期中序号一行,时间戳一行,文本一行)处理后新的字幕文件是每一段有四行,期中序号一行内容不变,时间戳一行内容不变,文本一行内容不变,新加一行内容

TOP

简单说就是单字幕变双字幕,时间轴不变,从其他文本文件读取n行,第一行加入到字幕文件第四行,第二行加入到字幕文件第四行,第三行写入到字幕文件第八行,,,以此类推

TOP

  1. awk 'NR%4==0{getline < "b.txt"}1' a.txt
复制代码
大概可以,但a.txt最后要是两个回车,因为要保证有个4的倍数的空行

TOP

本帖最后由 flashercs 于 2025-1-3 15:35 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. @REM 文本1 此文件必须带有时间轴00:00:04,458 --> 00:00:05,291
  4. set "file1=1.srt"
  5. @REM 文本2
  6. set "file2=2.srt"
  7. powershell -c "$re=[regex]'(?im)^\d{2}:\d{2}:\d{2},\d{3}\s*-->\s*\d{2}:\d{2}:\d{2},\d{3}(?>\r?\n[^\r\n]+)+';$lines2=[IO.File]::ReadAllLines($env:file2);$script:ctr=0;[IO.File]::WriteAllText($env:file1,$re.Replace([IO.File]::ReadAllText($env:file1),{param($m)($m.Value,$lines2[$script:ctr++]) -join [Environment]::NewLine;}));"
  8. pause
复制代码
微信:flashercs
QQ:49908356

TOP

谢谢我试一下哈

TOP

本帖最后由 Vidisdatadown 于 2025-1-3 14:14 编辑

可以修改一下吗,是把1.txt文本文件(没有时间轴的单普通文本文件)每一行批次插入2.srt(带时间轴且本身已经有一行文本了)
////////////////其实是2.srt字幕去除时间轴后得到一个纯文本文件,我把纯文本文件翻译成其他语种文字了(翻译后行数不变)得到1.txt纯文本,

TOP

回复 1# Vidisdatadown


  
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "useback delims=" %%a in ("2.txt") do (
  4. echo %%a
  5. set /a "n+=1,1/(n%%3)" 2>nul
  6. if errorlevel 1 (
  7. set /p str=
  8. setlocal enabledelayedexpansion
  9. echo=!str!
  10. endlocal
  11. echo=
  12. )
  13. )) < "1.txt" > "3.txt"
  14. pause
复制代码
bat小白,请多指教!谢谢!

TOP

1.srt必须有时间轴
2.srt没有
微信:flashercs
QQ:49908356

TOP

回复 1# Vidisdatadown

1.txt 是5行文本文件
1.srt 是被插入的字幕文件
2.srt 是插入后的字幕文件(结果文件)
  1. @echo off &setlocal enabledelayedexpansion
  2. set "k=" &(for /f "delims=" %%a in (1.srt) do (
  3.    set/a "k+=1"&echo,%%a
  4.    if !k! equ 3 set/p v=&echo,!v!&echo,&set "k="
  5. ))>2.srt <1.txt
  6. pause &exit/b
复制代码

TOP

返回列表