batch file来search和replace一个string

我需要一个batch file,它应该在PC上search今天发布的所有文件,命名为“example.ini”,并replace“example.ini”第二行中的一个string,它应该replace

SERVER_IP=111.111.111.111与另一台服务器ip SERVER_IP=222.222.222.222

这怎么可能?

在一些示例文件上测试这个。

它将更改c:\example.ini文件和包含SERVER_IP=212.83.63.108子目录,并将其更改为SERVER_IP=222.22.22.222

它使用一个名为repl.bat的帮助程序批处理文件 – https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

repl.bat放在与批处理文件相同的文件夹中。

 @echo off for /rc:\ %%a in (example.ini) do ( find "SERVER_IP=212.83.63.108" <"%%a" >nul && ( echo processing "%%a" type "%%a"|repl "SERVER_IP=212\.83\.63\.108" "SERVER_IP=222.22.22.222" >"%%a.tmp" move /y "%%a.tmp" "%%a" >nul ) ) 

在32位窗口Edlin(dos编辑器)可用。

 12 New text e 

是在文件的第12行写入“新文本”的edlin脚本。 类型

 edlin 

然后

 ? 

使用

 edlin c:\folder\filename.ext < edlin.script 

您必须使用短文件名。 文件必须在64K以下。

在第二行命名为example.ini的文件中,通过String2更改String1,该文件在当前驱动器的任意子目录c:

 @echo off setlocal enableextensions enabledelayedexpansion rem Arguments: rem %1 = search string rem %2 = replace string rem [ %3 = file in where to replace ] rem this parameters is internally used by the rem batch file while processing rem chech for parameters if "%~2"=="" goto :EOF rem retrieve parameters set "_search=%~1" set "_replace=%~2" rem check if asked to replace in a file rem this will be done recursively from this same batch if not "%~3"=="" ( set "_file=%~3" goto doFileReplace ) forfiles /PC:\ /S /M example.ini /D +0 /C "cmd /c if @isdir==FALSE findstr /c:\"%_search%\" \"@path\" >nul && %~dpnx0 \"%_search%\" \"%_replace%\" @path " goto :EOF :doFileReplace echo "%_file%" set "_tempFile=%temp%\%~nx0.tmp" break > "%_tempFile%" (for /F "tokens=1,* delims=:" %%l in ('findstr /n /r "." "%_file%"') do ( if %%l EQU 2 ( set "_text=%%m" echo !_text:%_search%=%_replace%! ) else ( echo %%m ) ))>>"%_tempFile%" copy /Y "%_tempFile%" "%_file%" >nul goto :EOF