@echo offsetlocal enabledelayedexpansion set "search=^(\d+)\.(\d+)\.(\d+)$" set "replace=$1-0-$2-$3" set "file=version.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!) )这个代码不能实现替换
时间: 2023-07-05 10:11:07 浏览: 166
dos 环境变量延迟扩展enabledelayedexpansion详解
根据你提供的代码,我发现可能是因为你在循环中对同一个文件进行读取和写入操作,导致出现了问题。可以尝试将读取和写入操作分开,例如:
```
@echo off
setlocal enabledelayedexpansion
set "search=^(\d+)\.(\d+)\.(\d+)$"
set "replace=$1-0-$2-$3"
set "file=version.cfg"
rem 读取文件并替换文本
for /f "delims=" %%i in ('type "%file%"') do (
set "line=%%i"
echo !line! | findstr /r /c:"%search%" >nul && set "line=!line:%search%=%replace%!"
echo(!line!
) > temp.txt
rem 将替换后的文本写入文件
move /y temp.txt "%file%"
```
这段代码将读取文件并替换文本后,将替换后的文本输出到临时文件 `temp.txt` 中,最后再将临时文件中的文本替换原文件。请注意,这里使用了 `move` 命令,而不是 `echo` 命令,以确保在替换文件时不会出现问题。
如果你仍然无法正确实现替换,请提供更多的上下文或错误信息,我将尽力帮助你解决问题。
阅读全文