批处理脚本-Findstr“ / n”标志?

时间:2018-07-19 17:58:52

标签: batch-file replace

我找到了一个我想在线进行操作的示例,该示例是在文本文件中搜索字符串,然后仅替换该字符串并写出到文件中。哪种方法适用...

该脚本确实替换了正确的文本。但是,它的打印行号是我不想要的。但是,如果我从findstr中删除 \ n 标志,则仅打印包含数据的行,以及不包含注释的行*(即以“ ;;”开头的

如何使用findstr打印所有没有行号的行?

@echo off &setlocal

set "search=string to replace"
set "replace=replace string with me"
set "textfile=input.ini"
set "newfile=output.ini"

(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"
type "%newfile%"

1 个答案:

答案 0 :(得分:0)

需要/n开关来保留空白行,因此,如果要将输入中的空行复制到输出中,则不应从/n中删除findstr开关,否则您将不需要findstr,可以直接使用FOR读取文件。相反,您可以通过以下修改的代码删除行号:

@echo off
setlocal

set "search=string to replace"
set "replace=replace string with me"
set "textfile=input.ini"
set "newfile=output.ini"

(for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%textfile%"') do (
    if "%%j" NEQ "" (
        set "line=%%j"
        setlocal enabledelayedexpansion
        echo(!line:%search%=%replace%!
        endlocal
    ) else (
     echo(
    )
))>"%newfile%"
type "%newfile%"

也不需要set "line=!line:%search%=%replace%!",您可以直接将!line:%search%=%replace%!传递给echo

或者您可以完全搭上findstr,只需编写如下的FOR循环,但是您会丢失空白行

(for /f "usebackq delims="eol^= %%i in ("%textfile%") do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    echo(!line:%search%=%replace%!
    endlocal
))>"%newfile%"

请注意,在"usebackq delims="eol^=中,引号(“)和eol之间不能有空格。这不是错字。

这是为了禁用默认的eol字符(;),以使FOR /F命令不会忽略以分号(;)开头的行