我正在搜索批处理脚本,该脚本编辑另一个批处理文件中的特定和已知行。 我找到了这个解决方案(Stackoverflow: Batch - edit specified line in text file),它几乎正常工作。我对Endoro脚本的唯一问题是它删除了我不想编辑的行开头的冒号。有没有办法避免这种情况发生? 非常感谢帮助!提前谢谢!
@ECHO OFF &SETLOCAL
:Input
set /p version=Please Enter Version:
:Replacement
SET "file=test.bat"
SET /a Line#ToSearch=4
SET "Replacement=set jversion = %Version%_x86"
(FOR /f "tokens=1*delims=: " %%a IN ('findstr /n "^" "%file%"') DO (
SET "Line=%%b"
IF %%a equ %Line#ToSearch% SET "Line=%Replacement%"
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO(!Line!
ENDLOCAL
))>"%file%.new"
TYPE "%file%.new"
MOVE "%file%.new" "%file%"
答案 0 :(得分:0)
for /F
将后续分隔符视为一个分隔符。 findstr /N
在每行前面加上行号和冒号。例如,如果第三行是:abcd ef
,for /F
会收到3::abcd ef
。解析两个令牌后,您将获得3
和abcd ef
。这就是领导冒号消失的原因。
要克服这个问题,请使用子字符串替换语法;假设变量Line
包含整行,包括行号前缀(上面的字符串3::abcd ef
),请使用SET "Line=!Line:*:=!"
删除包括第一个冒号在内的所有内容(因此生成的字符串为{ {1}})。
要获取行号,请使用另一个:abcd ef
循环,并将for /F
作为分隔符,仅获取第一个标记。
这是固定的脚本:
: