不仅有1 %windir%\System32
Windows x64上。有2个这样的目录。
真实%windir%\System32
目录适用于64位应用程序。该目录包含一个64位的cmd.exe
。
但也有用于32位应用程序的%windir%\SysWOW64
。如果32位应用程序访问%windir%\System32
,则使用此目录。它包含一个32位的cmd.exe
。
通过在路径中使用%windir%\Sysnative
,32位应用程序可以访问%windir%\System32
的64位应用程序。
欲了解更多详情,请参阅微软页面File System Redirector。
所以我认为你已经创建子目录run
在%windir%\System32
对64位应用程序和运行32位cmd
对于此目录不存在,因为在%windir%\SysWOW64
没有子目录run
这是%windir%\System32
32位cmd.exe
。
或者你已经创建子目录run
在%windir%\System32
为32位应用程序和运行64位cmd
为此,因为这个子目录只存在于%windir%\SysWOW64
此目录不存在,因为在%windir%\System32
没有子目录run
。
你可以使用你的批处理文件的顶部以下的子目录的情况下run
是%windir%\System32
64位应用程序:
@echo off
set "SystemPath=%windir%\System32"
if not "%ProgramFiles(x86)%"=="" (
if exist %windir%\Sysnative\* set "SystemPath=%windir%\Sysnative"
)
接下来,你需要在调用中System32\run
目录中的所有控制台应用程序与%SystemPath%
您批处理文件,例如%SystemPath%\run\YourApp.exe
。
它是如何工作的?
在Windows x86上,没有环境变量ProgramFiles(x86),因此实际上只有顶部定义的1 %windir%\System32
。
在Windows x64上,存在具有值的环境变量ProgramFiles(x86)。在Windows x64上,还会检查是否存在%windir%\Sysnative
中的文件。在这种情况下,批处理文件使用32位cmd.exe
执行,只有在这种情况下,才需要使用%windir%\Sysnative
。否则%windir%\System32
也可以在Windows x64上使用,因为当批处理文件以64位cmd.exe
启动时,这是包含64位控制台应用程序(和您的子目录run
)的目录。
注:%windir%\Sysnative
不是一个目录!这是不可能的cd
到%windir%\Sysnative
或使用if exist %windir%\Sysnative
你是否使用相同的用户上下文的所有尝试?当在C:\ WINDOWS \ system32中时,输入'dir/A:DRSH run';那么输出是什么?当你在那里键入'attrib run'时会显示什么? – aschipfl
这里是图像:http://i.imgur.com/0QWH86S.jpg –
如果你在目录中添加一个'.',如'cd run.',会发生什么? – aschipfl