找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 小白来了

[文本处理] 批处理如何检测srt每行字数,超出设定字数换行?

[复制链接]
发表于 2023-11-2 21:34:48 | 显示全部楼层
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. for /f "delims=" %%i in ('dir /b /a-d *.srt') do (
  5.         (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  6.                 if "%%b" equ "" (
  7.                         echo=
  8.                 ) else (
  9.                         set "str=%%b"
  10.                         setlocal enabledelayedexpansion
  11.                         call :1
  12.                         endlocal
  13.                 )
  14.         ))>"%%~ni_2%%~xi"
  15. )
  16. pause & exit

  17.         :1
  18.         echo !str:~0,30!
  19.         set "_str=!str:~30!"
  20.         if "!_str!" neq "" (
  21.                 set "str=!_str!"
  22.                 goto :1
  23.         ) else (
  24.                 exit /b
  25.         )

复制代码
 楼主| 发表于 2023-11-3 00:47:40 | 显示全部楼层
回复 14# buyiyang


    厉害了我的哥!技术专业!谢谢谢谢!
 楼主| 发表于 2023-11-3 00:48:26 | 显示全部楼层
回复 15# Five66


    感谢大佬!谢谢
 楼主| 发表于 2023-11-3 01:22:04 | 显示全部楼层
回复 16# 77七


大佬好,感谢您!还有一点小问题~

如果时间码超过字数的话 也会跟着换行。能否只检测文字,不检测数字时间码呢?

时间码格式:00:09:30,401 --> 00:09:30,971
发表于 2023-11-3 08:12:05 | 显示全部楼层
回复 19# 小白来了


  
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. for /f "delims=" %%i in ('dir /b /a-d *.srt') do (
  5.         (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  6.                 if "%%b" equ "" (
  7.                         echo=
  8.                 ) else (
  9.                         set "str=%%b"
  10.                         setlocal enabledelayedexpansion
  11.                         set "_str=!str:~0,1!"
  12.                         if !_str! gtr Z (
  13.                                 call :1
  14.                         ) else (
  15.                                 echo !str!
  16.                         )
  17.                         endlocal
  18.                 )
  19.         ))>"%%~ni_2%%~xi"
  20. )
  21. pause & exit

  22.         :1
  23.         echo !str:~0,30!
  24.         set "_str=!str:~30!"
  25.         if "!_str!" neq "" (
  26.                 set "str=!_str!"
  27.                 goto :1
  28.         ) else (
  29.                 exit /b
  30.         )

复制代码
 楼主| 发表于 2023-11-3 12:02:08 | 显示全部楼层
回复 20# 77七


    成功了,大佬威武霸气!感谢您的专业帮助~祝您财源广进~一起顺利!!
发表于 2023-11-3 14:22:24 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-11-4 08:22 编辑

感谢14楼指出代码错误。下面代码最多可进行2次换行,即适合一行不超过90个字符,原字幕文件空行保留:
  1. @echo off
  2. chcp 65001>nul
  3. for /f "delims=" %%i in ('dir /b /a-d *.srt') do (
  4.     (for /f "delims=" %%j in ('type "%%i"') do (
  5.         set "str=%%j"
  6.         setlocal enabledelayedexpansion
  7.         set /a t=str
  8.         if !t! equ !str! (
  9.             echo,%%j
  10.         ) else if not "!str:-->=!"=="!str!" (
  11.             echo,%%j
  12.         ) else (
  13.             if not "!str:~30!"=="" (
  14.                 echo,!str:~,30!
  15.                 set str=!str:~30!
  16.                 if not "!str:~30!"=="" (
  17.                     echo,!str:~,30!
  18.                     echo,!str:~30!
  19.                     echo,
  20.                 ) else (
  21.                     echo,!str!
  22.                     echo,
  23.                 )
  24.             ) else (
  25.                 echo,%%j
  26.                 echo,
  27.             )
  28.         )
  29.         endlocal
  30.     ))>"New-%%i"
  31. )
复制代码
发表于 2023-11-4 12:26:30 | 显示全部楼层
powershell
  1. <# :
  2. @echo off
  3. powershell -noprofile -NoLogo "iex (${%~f0} | out-string)"
  4. pause
  5. exit
  6. #>
  7. $re = "^\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}$"
  8. $n = 30
  9. [IO.Directory]::EnumerateFiles($pwd, "*.srt")|%{ [IO.File]::WriteAllLines("$_._new.txt",([IO.File]::ReadAllLines($_)|%{if($_ -match $re){$_ }else{$_ -split "(?<=\G.{$n})(?=.)"}}),[Text.Encoding]::UTF8)}
复制代码
 楼主| 发表于 2023-11-20 08:55:13 | 显示全部楼层
回复 20# 77七


    大哥,这段代码改成覆盖原文件,应该怎样修改呢?我自己修改的操作完成空白文件了。求您指教~谢谢!
  1. @echo off
  2. rem 批处理保存为utf-8编码格式
  3. chcp 65001 >nul
  4. for /f "delims=" %%i in ('dir /b /a-d *.srt') do (
  5.         (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  6.                 if "%%b" equ "" (
  7.                         echo=
  8.                 ) else (
  9.                         set "str=%%b"
  10.                         setlocal enabledelayedexpansion
  11.                         set "_str=!str:~0,1!"
  12.                         if !_str! gtr Z (
  13.                                 call :1
  14.                         ) else (
  15.                                 echo !str!
  16.                         )
  17.                         endlocal
  18.                 )
  19.         ))>"%%~ni_2%%~xi"
  20. )
  21. pause & exit

  22.         :1
  23.         echo !str:~0,30!
  24.         set "_str=!str:~30!"
  25.         if "!_str!" neq "" (
  26.                 set "str=!_str!"
  27.                 goto :1
  28.         ) else (
  29.                 exit /b
  30.         )
复制代码
发表于 2023-11-20 11:01:36 | 显示全部楼层
回复 24# 小白来了


   19行下面添加一行
  1.         move "%%~ni_2%%~xi" "%%i"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 09:18 , Processed in 0.018364 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表