2

我需要一个批处理文件,它应该在 PC 上搜索今天发布的所有名为“example.ini”的文件,并替换将在“example.ini”第二行中的字符串,它应该替换

SERVER_IP=111.111.111.111与另一个服务器 ipSERVER_IP=222.222.222.222

这怎么可能?

4

3 回答 3

4

在一些示例文件上进行测试。

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

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

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

@echo off
for /r c:\ %%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
    )
)
于 2013-11-04T09:47:21.610 回答
1

将今天在驱动器 c 的任何子目录中创建的名为 example.ini 的文件的第二行中的 String1 更改为 String2:

@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 /P C:\ /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
于 2013-11-04T10:21:07.790 回答
0

在 32 位 Windows 上可以使用 Edlin(一个 dos 编辑器)。

12 
New text
e

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

edlin

然后

?

使用

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

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

于 2013-11-04T09:48:17.907 回答