Board logo

标题: [文本处理] 批处理修改文件内的数值问题 [打印本页]

作者: 小白来了    时间: 2023-11-30 11:57     标题: 批处理修改文件内的数值问题

想修改.ass文件中第四行的PlayResX: 数值为188,以下为ass文件前几段内容

[Script Info]
; Script generated by FFmpeg/Lavc60.3.100
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes
YCbCr Matrix: None

只需要修改第四行的PlayResX: 为PlayResX: 188

以下是我弄得代码,求大佬指教~
  1. @echo off  
  2. setlocal enabledelayedexpansion  
  3. for /f "delims=" %%a in (*.ass) do (  
  4.     set "str=%%a"  
  5.     if not "!str:PlayResX:=!"=="!str!" (  
  6.         for /f "tokens=*" delims=: %%b in ("%%a") do (  
  7.             set "str=%%b"  
  8.             set "num=188"  
  9.             set "newStr=PlayResX: !num!"  
  10.             echo,!newStr!  
  11.         )  
  12.     )  
  13. )  
  14. pause
复制代码

作者: 77七    时间: 2023-11-30 14:53

浏览器地址栏输入 ini site:bathome.net 搜索相关帖子,试一下能自己写出来不
作者: Five66    时间: 2023-12-1 07:27

这样行不?输入文件1.ass,编码gbk,输出文件2.ass
  1. @echo off  
  2. (
  3. set /p line1=
  4. set /p line2=
  5. set /p line3=
  6. )<1.ass
  7. set "line4=PlayResX: 188"
  8. setlocal enabledelayedexpansion  
  9. (
  10. echo,!line1!
  11. echo,!line2!
  12. echo,!line3!
  13. echo,!line4!
  14. more +4 1.ass
  15. )>2.ass
  16. endlocal&pause&exit/b
复制代码

作者: hfxiang    时间: 2023-12-1 09:50

回复 1# 小白来了

第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe )实现方法如下:
  1. @echo off  
  2. for /f "delims=" %%a in ('dir /b /s *.ass') do @sed -r -i.bak "/^PlayResX:.+$/cPlayResX: 188" "%%a"
  3. pause
复制代码

作者: terse    时间: 2023-12-1 10:03

判断每行字符。前面是否为PlayResX:如果不是就不处理,否则,直接输入PlayResX:188
作者: ShowCode    时间: 2023-12-1 10:39

回复 1# 小白来了
  1. @echo off
  2. set "OldFolder=C:\Test\From"
  3. set "NewFolder=C:\Test\To"
  4. setlocal enabledelayedexpansion
  5. for %%i in ("%OldFolder%\*.ass") do (
  6.     set "str=%%i"
  7.     echo,!str!
  8.     (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  9.         if not "%%b" == "" (
  10.             set "ThisRow=%%b"
  11.             if "!ThisRow:PlayResX:=!" == "!ThisRow!" (
  12.                 echo,!ThisRow!
  13.             ) else (
  14.                 echo,PlayResX: 188
  15.             )
  16.         ) else (
  17.             echo,
  18.         )
  19.     ))>"%NewFolder%\%%~nxi"
  20. )
复制代码





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