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

[文本处理] 批处理修改文件内的数值问题

想修改.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
复制代码

回复 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. )
复制代码
测试代码之前请做好备份

TOP

判断每行字符。前面是否为PlayResX:如果不是就不处理,否则,直接输入PlayResX:188

TOP

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

TOP

这样行不?输入文件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
复制代码

TOP

浏览器地址栏输入 ini site:bathome.net 搜索相关帖子,试一下能自己写出来不
bat小白,请多指教!谢谢!

TOP

返回列表