此批处理代码适用于直接运行批处理文件:
set %windir%\system32\drivers\etc\hosts
attrib -r %hosts%
pause
但是在将这个批处理文件打包到 WinRAR 自解压存档中并在解压过程中自动运行它时,它并没有按预期工作。
此批处理代码适用于直接运行批处理文件:
set %windir%\system32\drivers\etc\hosts
attrib -r %hosts%
pause
但是在将这个批处理文件打包到 WinRAR 自解压存档中并在解压过程中自动运行它时,它并没有按预期工作。
您正在创建一个 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 的System32
64 位应用程序的子目录中。
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
是否存在。