我的Windows XP Virtual Box上有一台本地服务器。
每次我的主网络从wifi变为有线或我移动到不同的网络时,我的Win XP盒的IP都会发生变化。
我想运行一个批处理文件,将新IP映射到我的主机文件中的某个通用名称
C:\WINDOWS\system32\drivers\etc\hosts
例如,如果我现在有:
10.97.100.74 www.myAppServer.com
如果ip更改为192.168.11.9
,
我想在hosts文件中搜索字符串myAppServer
,并用
192.168.11.9 www.myAppServer.com
我能够使用以下方式获取当前的IP:
for /f "skip=1 delims={}, " %%A in ('wmic nicconfig get ipaddress') do for /f "tokens=1" %%B in ("%%~A") do set "IP=%%~B"
set IP=%IP%
但如何找到该行并替换它?
答案 0 :(得分:0)
我在DOS Tips
上找到了这个BatchSubstitute - 逐行解析文件并替换子字符串
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitute - parses a File line by line and replaces a substring
::syntax: BatchSubstitute.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
::$changed 20100115
::$source http://www.dostips.com
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
答案 1 :(得分:0)
如果你想替换只有一行,你可以这样做:
@echo off
setlocal
cd "C:\WINDOWS\system32\drivers\etc"
for /F "delims=:" %%a in ('findstr /N "myAppServer" hosts') do set lineNum=%%a
(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" hosts') do (
if %%a equ %lineNum% (
echo 192.168.11.9 www.myAppServer.com
) else (
echo %%a
)
)) > hosts.new
此程序消除空行,如果hosts文件包含批处理特殊字符(如| > < & !
),则会出现问题。如果需要,可以修复这些细节。
答案 2 :(得分:0)
最简单的方法就是不替换它。删除它并添加一个新行。
如果您的IP地址为%IP%,则
set "hostsFile=%systemroot%\system32\drivers\etc\hosts"
(
findstr /v /i /c:"www.MyAppServer.com" "%hostsFile%"
echo(
echo %IP% www.MyAppServer.com
) > "%temp%\hosts"
move /y "%temp%\hosts" "%hostsFile%" >nul 2>nul
并确保您拥有足以更改hosts文件的权限,并且没有防病毒软件阻止对其进行更改。
答案 3 :(得分:0)
这终于完成了工作:
@echo off
REM Set a variable for the Windows hosts file location
set "hostpath=%systemroot%\system32\drivers\etc"
REM set "hostpath=C:\projectStar\Programs\etc"
set "hostfile=hosts"
REM Make the hosts file writable
attrib -r -s -h "%hostpath%\%hostfile%"
for /f "skip=1 delims={}, " %%A in ('wmic nicconfig get ipaddress') do for /f "tokens=1" %%B in ("%%~A") do set "IP=%%~B"
REM echo %IP%
set IP=%IP%
move /y "%hostpath%\%hostfile%" "Hs.txt"
findstr /v/c:"www.nexsoftnetwork.com" Hs.txt > "Hss2.txt"
echo %IP% www.nexsoftnetwork.com >>"Hss2.txt"
move /y "Hss2.txt" "%hostpath%\%hostfile%"
echo Done.
pause
谢谢大家的投入。 但我想从我的手机上打这个服务器,这个服务器与服务器在同一个网络上。最后我注意到,除非我修改主机操作系统或手机的主机文件,否则它仍然无法解决我的问题。只有当我想在虚拟框中点击此服务器时,此解决方案才有效。