【小工具】Windows 一键打开可修改的 Hosts 文件

上传了小工具和代码,欢迎下载。

背景

如果想要修改 hosts 文件,在 Linux 下可以直接 sudo vim /etc/hosts,而在 windows 下需要打开 C:\Windows\System32\drivers\etc\hosts,而且我没有找到什么好的 cmd 命令能够直接打开一个管理员的记事本窗口。

在网上找了一些资料之后,得到了一个取巧的办法,使用 vbs 来申请管理员权限然后使用记事本打开,快来和小编一起看看吧(这浓浓的营销号味)。

代码

核心代码就几行,请保存成一个批处理文件 hosts.bat.

@echo off

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

notepad.exe "C:\Windows\System32\drivers\etc\hosts"

:: "D:\Soft\Develop\Sublime Text 3\sublime_text.exe" "C:\Windows\System32\drivers\etc\hosts"

第一行是批处理常规操作,关闭回显。

第二行前面的 %1 是一个参数位置,在无参数打开时不起任何作用,从 mshta 开始执行。

第二行从 mshta 开始,到 &&exit 之前的部分是调用 vbs 脚本执行具体命令,其中:

  • runas 1 表示申请管理员权限
  • %~s0 表示当前文件的名字,即 hosts.bat
  • 具体命令也就是申请管理员权限,执行 cmd /c hosts.bat ::
  • :: 被视为参数,会替换文件中的 %1,双冒号在批处理语法中表示注释本行。

这样就获得了管理员权限并递归调用,但是从第三行开始执行,即使用记事本打开 hosts 文件。

被注释掉的第四行是我用自己喜欢的编辑器(sublime)替换掉了记事本,可以选择性使用。

在递归调用结束后,第二行后面的 &&exit 会将程序中止,避免出现两次记事本。

快捷方式

Windows 不支持将 bat 文件直接放到开始菜单上,为此我们可以创建一个快捷方式,值是 C:\Windows\System32\cmd.exe /c D:\Save\Fix\hosts\hosts.bat(请将后半段改成你 hosts.bat 的实际存放位置。然后就可以将快捷方式放到开始菜单上。

也可以直接用转换后的 exe 文件挂在开始菜单上,链接见文首。

效果

  1. 点击快捷方式或 bat 后,出现一个黑框和命令申请。
    【小工具】Windows 一键打开可修改的 Hosts 文件_第1张图片
  2. 点击 是,出现记事本(我这里是 sublime),内容是可以直接修改的 hosts.
    【小工具】Windows 一键打开可修改的 Hosts 文件_第2张图片
  3. 关闭 sublime,黑框也自动关闭。

总结

前段时间因为奇奇怪怪的原因一直在修改 hosts,每次点好多下实在烦的不行了,才查资料做了这个小东西。也许能给也有这样需求的人带来一些方便。

学到了利用 vbs 获取 cmd 权限的神奇操作。

Windows 好感度减一。

你可能感兴趣的:(探索)