我的意思是,如果正则匹配到是是1.0.988替换后变为1-0-0-988
时间: 2023-12-31 13:06:01 浏览: 24
好的,如果要将`1.0.988`替换为`1-0-0-988`,可以使用以下的bat脚本来实现:
```
@echo off
setlocal enabledelayedexpansion
set "search=^(\d+)\.(\d+)\.(\d+)$"
set "replace=$1-0-0-$3"
set "file=C:\path\to\file.cfg"
for /f "delims=" %%i in ('type "%file%" ^& break ^> "%file%"') do (
set "line=%%i"
echo !line! | findstr /r /c:"%search%" >nul && set "line=!line:%search%=%replace%!"
>>"%file%" echo(!line!
)
```
将`search`变量设置为要查找的正则表达式,将`replace`变量设置为要替换的字符串,将`file`变量设置为要修改的文件路径。
然后运行这个脚本,它将会在文件中查找每个匹配的字符串并将其替换为指定的字符串。在这个脚本中,我们使用了`$1`、`$2`和`$3`来表示正则表达式中的第1、2和3个捕获组,以便保留`1`和`988`部分的原值。
相关问题
使用bat脚本正则表达式把1.0.988替换为1-0-1-988
可以使用以下的 BAT 脚本正则表达式实现:
```bat
@echo off
set str=1.0.988
echo Before: %str%
setlocal enabledelayedexpansion
set str=!str:.=-!
set str=!str:~0,-4!-!str:~-3!
echo After: %str%
```
输出结果为:
```
Before: 1.0.988
After: 1-0-1-988
```
解释:
1. 首先将要替换的字符串 `1.0.988` 赋值给变量 `str`。
2. 使用 `setlocal enabledelayedexpansion` 开启延迟环境变量扩展。
3. 使用 `!str:.=-!` 将 `.` 替换为 `-`。
4. 使用 `!str:~0,-4!-!str:~-3!` 将倒数第四个字符前面的子串和倒数第三个字符组成的子串之间插入 `-`。
这样就可以实现将 `1.0.988` 替换为 `1-0-1-988` 的效果了。
使用bat脚本正则表达式把文件中的把1.0.988替换为1-0-1-988,且不替换空格
在 Windows 中,批处理脚本本身不支持正则表达式,但是我们可以借助其他命令或工具来实现类似的功能。以下是使用 Windows 自带的 `findstr` 和 `powershell` 命令来实现将 `1.0.988` 替换为 `1-0-1-988` 的 bat 脚本示例:
```bat
@echo off
setlocal enabledelayedexpansion
set "file=test.txt"
set "tempfile=%file%.tmp"
for /f "tokens=*" %%a in (%file%) do (
set "line=%%a"
set "newline=!line!"
echo !newline!| findstr /r "\<1\.0\.988\>" >nul
if not errorlevel 1 (
set "newline=!newline:1.0.988=1-0-1-988!"
)
echo !newline!>>%tempfile%
)
move /y %tempfile% %file%
```
这个脚本的具体思路是:
1. 使用 `set "file=test.txt"` 和 `set "tempfile=%file%.tmp"` 定义需要处理的文件和临时文件的名称。
2. 使用 `for /f "tokens=*" %%a in (%file%) do (...)` 循环遍历文件的每一行。
3. 使用 `set "line=%%a"` 将当前行的文本内容赋值给变量 `line`。
4. 使用 `set "newline=!line!"` 定义一个新的变量 `newline`,用于存储替换后的行,初始值为当前行的内容。
5. 使用 `echo !newline!| findstr /r "\<1\.0\.988\>" >nul` 命令来判断当前行是否包含 `1.0.988`,其中 `/r "\<1\.0\.988\>"` 表示使用正则表达式检索 `1.0.988` 的完整单词(即不包含在其他单词中的 `1.0.988`)。
6. 如果当前行包含 `1.0.988`,则使用 `set "newline=!newline:1.0.988=1-0-1-988!"` 命令将 `1.0.988` 替换为 `1-0-1-988`。
7. 使用 `echo !newline!>>%tempfile%` 将替换后的行写入临时文件。
8. 使用 `move /y %tempfile% %file%` 将临时文件重命名为原文件,完成替换操作。
这样就可以将文件中的 `1.0.988` 替换为 `1-0-1-988`,且不替换空格。需要注意的是,这个脚本只能替换完整的 `1.0.988`,而不能替换其他形式的 `1.0.9-8-8` 等。如果需要处理更复杂的情况,可以考虑使用其他强大的文本处理工具或编程语言。