替换文件中一行上的字符串会替换空行

时间:2016-03-01 17:05:16

标签: windows batch-file command-line

我创建一个简单的批处理来替换文件中的特定字符串并将输出转储到新文件:

set oldstring=SERVER_IP
set newstring=10.10.10.1

setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (test.txt) do (
     set str=%%i
     set str=!str:%oldstring%=%newstring%!
     echo !str!>>newfile
 )

如果我在包含字符'a'换行符的文件上运行它,那么空格和换行符会导致输出错误。

a[lf]
 [lf]

OUPUT:

a
SERVER_IP=10.10.10.1

为什么每当我有一行满是空格的行时,我会在输出中找到我想要替换的字符串?

修改

预期输出

a

1 个答案:

答案 0 :(得分:1)

发生这种情况,因为%%i对于带有空格的行是空的 str也为空,未定义空变量。

要替换空变量失败,冒号前的所有内容都将被删除。

set str=!str:%oldstring%=%newstring%!将评估为set str=SERVER_IP=10.10.10.1! 由于延迟扩展,感叹号将被删除。

您可以检查是否已定义str

....
if defined str (
    set str=!str:%oldstring%=%newstring%!
    echo(!str!>>newfile
)