|
本帖最后由 cii09 于 2024-4-21 13:38 编辑
===初步解决=======
感谢szwp,junyee的帮助
方法1 9#
方法2 18#
=====
bat批处理findstr配合set修改文本配置文件,匹配文件名指定行的路径地址,
绿色软件修复配置文件中路径地址到当前目录
=====
请问findstr正则表达式引用为什么会无效
=====
请问set "b=!a:%oldStr%=%newStr%!"正则表达式引用为什么会无效
=====
bat绿色软件路径修复脚本,findstr变量路径正则表达式应该怎么写东拼西凑出来的很烂,辣眼见谅
- ::replace.bat
- @echo off
- set dd=%DATE:~8,2%
- set mm=%DATE:~5,2%
- set yy=%DATE:~0,4%
- set Tss=%TIME:~6,2%
- set Tmm=%TIME:~3,2%
- set Thh=%TIME:~0,2%
- set Thh=%Thh: =0%
- ::ECHO %yy%%mm%%dd%-%Thh%%Tmm%%Tss%.txt
- setlocal enabledelayedexpansion
-
- REM orginalFile原始要操作的文件,单个文件。注:替换的文件中不能有冒号,否则结果不对。或者修改本脚本中for循环的delims=:中冒号为其他在文件中没有出现的符号,其中不能是等于号,<>需要加转义字符^,即写成delims=^<。
- set orginalFile=Libraries.Info
- REM outputFile指定替换字符串后,输出的文件
- set outputFile=Libraries.Info.tmp
- REM 最终文件
- set finalOutFile=Libraries.Info
- REM 设置程序所在
- ::set localadds=%~dp0test1\
- set localadds=%~dp0
- REM 要替换的原始字符串
- ::set oldStr=.\FL.Backups
- set "oldStr=FL.Backups[ DISCUZ_CODE_0 ]quot;
- REM 替换后的字符串
- set newStr=%localadds%FL.Backups
- REM 指定替换找到的第几个字符串,0是指全部替换
- set /a number=1
-
- :bakorg
- copy %orginalFile% %orginalFile%.bak%yy%%mm%%dd%%Thh%%Tmm%%Tss%
- goto replace
- :replace
- if exist %outputFile% del %outputFile%
- set /a i=0
- for /f "delims=" %%i in ('findstr /n .* %orginalFile%') do (
- set "a=%%i"
- set "a=!a:*:=!"
- if "!a!"=="" (
- set "b=!a!"
- ) else (
- if %number% == 0 (
- set "b=!a:%oldStr%=%newStr%!"
- ) else (
- set "b=!a!"
- if not "!a!" == "!a:%oldStr%=%newStr%!" (
- set /a i+=1
- if %number% == !i! (
- set "b=!a:%oldStr%=%newStr%!"
- )
- )
- )
- )
- REM 保留空白行,某行内容是空格或多个空格
- echo.!b!>>%outputFile%
- )
- REM 临时文件改名删除源文件并输出结果文件
- if exist %orginalFile% del %orginalFile%
- ::rename %orginalFile% %orginalFile%.bak
- rename %outputFile% %finalOutFile%
复制代码
set oldStr=.\FL.Backups
我想匹配以FL.Backups结尾的行,应该怎么写可以被正确识别
- [LIBRARIES]
- c:\FH.Backups
- .\FL.Backups
- d:\FH.Backups2
- d:\FH.Backups5
- d:\FH.Backups3
- d:\FH.Backups20240403
- H:\gr\FL.Backups
复制代码
比如这个例子,替换第4和第9行到D:\test1\FL.Backups,D:\test2\FL.Backups
|
|