我找到了一个我想在线进行操作的示例,该示例是在文本文件中搜索字符串,然后仅替换该字符串并写出到文件中。哪种方法适用...
该脚本确实替换了正确的文本。但是,它的打印行号是我不想要的。但是,如果我从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%"
答案 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
命令不会忽略以分号(;)开头的行