此批处理代码可直接运行批处理文件:
set %windir%\system32\drivers\etc\hosts
attrib -r %hosts%
pause
但是,在将此批处理文件打包到WinRAR自解压存档中并在提取过程中自动运行时,它无法正常工作。
答案 0 :(得分:1)
您正在创建一个32位RAR自解压存档。因此,批处理文件由32位cmd.exe
处理,这导致根据Microsoft的File System Redirector文档访问%SystemRoot%\SysWOW64
而不是%SystemRoot%\System32
。您还应该查看WOW64 Implementation Details和Registry Keys Affected by WOW64。
目录%SystemRoot%\SysWOW64
不包含drivers\etc\hosts
。对于64位应用程序,hosts
文件仅存在于System32
的子目录中的64位Windows上。
Sysnative
重定向器仅适用于在64位Windows上运行的32位应用程序,可用于确定批处理文件在哪个环境中运行以访问通常仅恶意软件修改的hosts
文件,但没有安装RAR自解压存档的友好应用程序。
@echo off
set "SystemPath=%SystemRoot%\System32"
if exist "%SystemRoot%\Sysnative\cmd.exe" set "SystemPath=%SystemRoot%\Sysnative"
set "HostsFile=%SystemPath%\drivers\etc\hosts"
%SystemPath%\attrib.exe -r %HostsFile%
pause
请注意%SystemRoot%\Sysnative
既不是文件系统中的目录也不是链接。它是64位Windows上32位应用程序的重定向程序。因此,在64位Windows上默认启动的64位Windows资源管理器或任何其他64位应用程序%SystemRoot%\Sysnative
根本不存在。 32位应用程序只能检查%SystemRoot%\Sysnative
中是否有任何文件,但无法检查目录 %SystemRoot%\Sysnative
是否存在。