如何读取.bat文件中的空行,并且变量被放置在%xyz%中


@echo off
cd /d D:
setlocal enabledelayedexpansion
set /p "var=v3 "
set "file=Rev.bat"
for /F "tokens=1,* delims==" %%i in ('findstr "%var%" Rev.bat') do (
set "versionVar=%%~i"
set "versionVal=%%~j"
set /a sequence=%%~j+1
)
for /f "tokens=1,*delims=]" %%i in ('type "%file%" ^| find /v /n "" ^& break^>%file%') do (
set "line=%%j"
if "!line!" == "!versionVar!=!versionVal!" set line=!versionVar!=!sequence!
echo(!line!>>!file!
)

我试过这个代码,它找不到字符串

好的,如果我理解正确,这就是你想要的:

@echo off
cd /d D:
setlocal enabledelayedexpansion
set "file=rev.bat"
for /F "tokens=1,* delims==" %%i in ('findstr "%~1" rev.bat') do (
set "versionVar=%%~i"
set "versionVal=%%~j"
set /a sequence=%%~j+1
)
for /f "tokens=1,*delims=]" %%i in ('type "%file%" ^| find /v /n "" ^& break^>%file%') do (
set "line=%%j"
if "!line!" == "!versionVar!=!versionVal!" set line=!versionVar!=!sequence!
echo(!line!>>!file!
)

解释。我们获取文件内容,使用find分配行id。然后我们进行搜索和替换,并简单地删除行id。然后将所有内容写回文件,包括更新后的版本。

注意,您需要使用一个参数运行脚本,即script.cmd v3

编辑。要通过请求一次执行多个变量,请执行:

@echo off
cd /d D:
setlocal enabledelayedexpansion
:Begin
set /p "var=enter variable to replace [.ie v1, v2, v3]: "
set "file=rev.bat"
for /F "tokens=1,* delims==" %%i in ('findstr "%var%" rev.bat') do (
set "versionVar=%%~i"
set "versionVal=%%~j"
set /a sequence=%%~j+1
)
for /f "tokens=1,*delims=]" %%i in ('type "%file%" ^| find /v /n "" ^& break^>%file%') do (
set "line=%%j"
if "!line!" == "!versionVar!=!versionVal!" set line=!versionVar!=!sequence!
echo(!line!>>!file!
)