2

我正在尝试编写一个批处理文件来查找和替换主机文件中的 IP 地址。

我做了一些研究并发现了这一点,但它似乎不起作用。我得到了“完成”的最后回声。但它不起作用。

@echo off

REM Set a variable for the Windows hosts file location
set hostpath=%systemroot%\system32\drivers\etc
set hostfile=hosts

REM Make the hosts file writable
attrib -r %hostpath%\%hostfile%

setlocal enabledelayedexpansion
set string=%hostpath%\%hostfile%

REM set the string you wish to find
set find=OLD IP

REM set the string you wish to replace with
set replace=NEW IP
call set string=%%string:!find!=!replace!%%
echo %string%

REM Make the hosts file un-writable
attrib +r %hostpath%\%hostfile%

echo Done.
4

3 回答 3

1

您发布的代码只是试图替换文件名中的值,而不是文件内容中的值。

您需要更改代码才能在文件内容中查找和替换。

为此,您需要 (1) 读取文件 (2) 查找并替换字符串以及 (3) 回写

  1. 你必须阅读文件。使用FOR命令。阅读HELP FOR并尝试以下代码。

    for /f "tokens=*" %%a in (%hostpath%\%hostfile%) do (
      echo %%a
    )
    
  2. 查找和替换

    for /f "tokens=*" %%a in (%hostpath%\%hostfile%) do (
      set string=%%a
      set string=!string:%find%=%replace%!
      echo !string!
    )
    
  3. 您必须将结果写回文件。将 echo 的输出重定向到临时文件,然后用临时文件替换原始文件

    echo. >%temp%\hosts
    for /f "tokens=*" %%a in (%hostpath%\%hostfile%) do (
      set string=%%a
      set string=!string:%find%=%replace%!
      echo !string! >>%temp%\hosts
    )
    copy %temp%\hosts %hostpath%\%hostfile%
    
于 2013-04-25T08:35:27.207 回答
0
@echo off

REM Set a variable for the Windows hosts file location
set "hostpath=%systemroot%\system32\drivers\etc"
set "hostfile=hosts"

REM Make the hosts file writable
attrib -r -s -h "%hostpath%\%hostfile%"

REM set the string you wish to find
set find=OLD IP
REM set the string you wish to replace with
set replace=NEW IP

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type "%hostpath%\%hostfile%"') do (
set "string=%%a"
set "string=!string:%find%=%replace%!"
>> "newfile.txt" echo !string!
)

move /y "newfile.txt" "%hostpath%\%hostfile%"

REM Make the hosts file un-writable - not necessary.
attrib +r "%hostpath%\%hostfile%"

echo Done.
pause
于 2013-04-25T08:25:54.373 回答
-1

这将起作用。

call set newstring=%string:%find%=%replace%%

将结果值分配给新字符串。

于 2013-04-25T08:21:09.163 回答