Batch file 为什么从WinRAR SFX执行的批处理文件无法访问主机文件?

Batch file 为什么从WinRAR SFX执行的批处理文件无法访问主机文件?,batch-file,cmd,command,winrar,sfx,Batch File,Cmd,Command,Winrar,Sfx,此批处理代码用于直接运行批处理文件: set %windir%\system32\drivers\etc\hosts attrib -r %hosts% pause 但在将此批处理文件打包到WinRAR自解压归档文件中并在提取过程中自动运行它时,它并不能像预期的那样工作。您正在创建一个32位RAR自解压归档文件。因此,批处理文件由32位cmd.exe处理,根据Microsoft的文档,这导致访问%SystemRoot%\SysWOW64,而不是%SystemRoot%\System32。你也应

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

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

但在将此批处理文件打包到WinRAR自解压归档文件中并在提取过程中自动运行它时,它并不能像预期的那样工作。

您正在创建一个32位RAR自解压归档文件。因此,批处理文件由32位
cmd.exe
处理,根据Microsoft的文档,这导致访问
%SystemRoot%\SysWOW64
,而不是
%SystemRoot%\System32
。你也应该看一看,然后看一看

目录
%SystemRoot%\SysWOW64
不包含
drivers\etc\hosts
。对于64位应用程序,
hosts
文件仅存在于64位窗口的
System32
子目录中

Sysnative
仅适用于64位Windows上运行的32位应用程序的重定向程序可用于确定批处理文件在哪个环境中运行,以访问
主机
文件,该文件通常只有恶意软件修改,但没有安装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
是否存在。

不确定您在问什么。这与WinRAR有什么关系?你说的“不工作”是什么意思“>这段代码工作:((设置hosts=“%windir%\system32\drivers\etc\hosts”attrib-r%hosts%(echo 127.0.0.1 example1.com echo 127.0.0.1 example2.com)>>%hosts%”暂停)但如果我创建了“winrar自解压存档”,那么“exe”就不是工作批处理文件“command”,这并不能真正澄清任何事情。不能使用自解压存档将批处理文件转换为exe文件;存档只是容器。请使用其他代码更新您的问题。不要把它放在评论里。