[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  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. )
复制代码
bat小白,请多指教!谢谢!

TOP

回复 14# buyiyang


    厉害了我的哥!技术专业!谢谢谢谢!

TOP

回复 15# Five66


    感谢大佬!谢谢

TOP

回复 16# 77七


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

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

时间码格式:00:09:30,401 --> 00:09:30,971

TOP

回复 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. )
复制代码
bat小白,请多指教!谢谢!

TOP

回复 20# 77七


    成功了,大佬威武霸气!感谢您的专业帮助~祝您财源广进~一起顺利!!

TOP

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

TOP

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

TOP

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

TOP

回复 24# 小白来了


   19行下面添加一行
  1.         move "%%~ni_2%%~xi" "%%i"
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表