2014-01-20 25 views
1

我对此很陌生,所以请耐心等待。基于IP的'主机'文件

我想写一个批处理文件,可以替换etc/hosts文件,这取决于我登录时所处的VLAN。 ie:当我登录时,我得到了xxx。 xxx.102.xxx本地IP,我想使用hosts1文件。当我登录时,我有xxx.xxx.103.xxx本地IP,我想使用hosts2文件。

因此,基本上基于ipconfig的输出,扫描它为“102”和“103”,并且当输出中的数字时,它可以替换Windows目录中的hosts文件。

想法?

+0

你不能只在你的MAC地址分配一个静态本地IP在路由器配置? – Ivan0x32

回答

0
for %%a in (102 102 103) do (

    ipconfig | find "xxx.xxx.%%a.xxx" >nul 2>&1 && copy /y hosts%%a "%SystemRoot%\system32\drivers\etc\hosts" 
) 

会工作,如果你有管理员权限和你的主机文件anemd hosts101 hosts102 ...

0

你可以试试这个。我在这里使用findstr的正则表达式功能:

ipconfig | findstr /er "[0-9][0-9]*.[0-9][0-9]*.102.[0-9][0-9]*" && copy hosts1 "%windir%\system32\drivers\etc\hosts" 
ipconfig | findstr /er "[0-9][0-9]*.[0-9][0-9]*.103.[0-9][0-9]*" && copy hosts2 "%windir%\system32\drivers\etc\hosts" 
+0

我不确定该正则表达式是否会处理IP地址中的单个数字。 – foxidrive

+0

@foxidrive这个正则表达式显然不能测试IPv4的有效性。但是,它可以在输出中找到(有效的)IPv4。你为什么认为,它不会处理单个数字? ''[0-9] [0-9] *'和ERE中的'[0-9] +'相同,即'一个或多个'。 – Endoro

+0

是的,你是对的。 '*'是零或更多 - Mea Culpa。 – foxidrive