1

此批处理代码适用于直接运行批处理文件:

set %windir%\system32\drivers\etc\hosts
attrib -r %hosts%
pause

但是在将这个批处理文件打包到 WinRAR 自解压存档中并在解压过程中自动运行它时,它并没有按预期工作。

4

1 回答 1

2

您正在创建一个 32 位 RAR 自解压存档。因此批处理文件由 32 位处理,cmd.exe这导致访问%SystemRoot%\SysWOW64而不是%SystemRoot%\System32根据 Microsoft 的文件系统重定向器文档。您还应该查看WOW64 Implementation Details and Registry Keys Affected by WOW64

该目录%SystemRoot%\SysWOW64不包含drivers\etc\hosts. 该hosts文件仅存在于 64 位 Windows 的System3264 位应用程序的子目录中。

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 位应用程序上默认启动的 64 位 Windows 资源管理器%SystemRoot%\Sysnative根本不存在。而 32 位应用程序只能检查 中是否有文件%SystemRoot%\Sysnative,而不能检查目录 %SystemRoot%\Sysnative是否存在。

于 2017-11-02T06:21:11.067 回答