标题: [文本处理] 批处理修改文件内的数值问题 [打印本页]
作者: 小白来了 时间: 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
以下是我弄得代码,求大佬指教~- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (*.ass) do (
- set "str=%%a"
- if not "!str:PlayResX:=!"=="!str!" (
- for /f "tokens=*" delims=: %%b in ("%%a") do (
- set "str=%%b"
- set "num=188"
- set "newStr=PlayResX: !num!"
- echo,!newStr!
- )
- )
- )
- pause
复制代码
作者: 77七 时间: 2023-11-30 14:53
浏览器地址栏输入 ini site:bathome.net 搜索相关帖子,试一下能自己写出来不
作者: Five66 时间: 2023-12-1 07:27
这样行不?输入文件1.ass,编码gbk,输出文件2.ass- @echo off
- (
- set /p line1=
- set /p line2=
- set /p line3=
- )<1.ass
- set "line4=PlayResX: 188"
- setlocal enabledelayedexpansion
- (
- echo,!line1!
- echo,!line2!
- echo,!line3!
- echo,!line4!
- more +4 1.ass
- )>2.ass
- endlocal&pause&exit/b
复制代码
作者: hfxiang 时间: 2023-12-1 09:50
回复 1# 小白来了
第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe )实现方法如下:- @echo off
- for /f "delims=" %%a in ('dir /b /s *.ass') do @sed -r -i.bak "/^PlayResX:.+$/cPlayResX: 188" "%%a"
- pause
复制代码
作者: terse 时间: 2023-12-1 10:03
判断每行字符。前面是否为PlayResX:如果不是就不处理,否则,直接输入PlayResX:188
作者: ShowCode 时间: 2023-12-1 10:39
回复 1# 小白来了 - @echo off
- set "OldFolder=C:\Test\From"
- set "NewFolder=C:\Test\To"
- setlocal enabledelayedexpansion
- for %%i in ("%OldFolder%\*.ass") do (
- set "str=%%i"
- echo,!str!
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
- if not "%%b" == "" (
- set "ThisRow=%%b"
- if "!ThisRow:PlayResX:=!" == "!ThisRow!" (
- echo,!ThisRow!
- ) else (
- echo,PlayResX: 188
- )
- ) else (
- echo,
- )
- ))>"%NewFolder%\%%~nxi"
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |