批量 - 编辑文件中的单行

时间:2016-05-04 09:49:39

标签: batch-file replace edit

我正在搜索批处理脚本,该脚本编辑另一个批处理文件中的特定和已知行。 我找到了这个解决方案(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%"

1 个答案:

答案 0 :(得分:0)

for /F将后续分隔符视为一个分隔符。 findstr /N在每行前面加上行号和冒号。例如,如果第三行是:abcd effor /F会收到3::abcd ef。解析两个令牌后,您将获得3abcd ef。这就是领导冒号消失的原因。

要克服这个问题,请使用子字符串替换语法;假设变量Line包含整行,包括行号前缀(上面的字符串3::abcd ef),请使用SET "Line=!Line:*:=!"删除包括第一个冒号在内的所有内容(因此生成的字符串为{ {1}})。

要获取行号,请使用另一个:abcd ef循环,并将for /F作为分隔符,仅获取第一个标记。

这是固定的脚本:

: