为什么os.path.exists(“C:\\ windows \\ system32 \\ inetsrv \\ metaback”)即使存在也会返回False?

我有一个Python程序,应该清理一些目录,其中一个是C:\windows\system32\inetsrv\metaback ; 然而, os.path.exists()在该目录上返回False,即使它存在(并且我有权访问它)。

有趣的是windirstat工具也完全错过了它。

任何人都可以想到一个原因,为什么这可能是另一种方式,我可以检查,看看它是否存在? 我似乎甚至不能运行os.listdir()就可以了。

更新:如果Windows框是32位的,则os.path.exists()在该目录上工作,但如果是64位,则不起作用。 windirstat在一个32位的盒子上也显示正确。

这是工作中系统文件夹的重定向。 在64位版本的Windows上运行32位进程并使用路径%WINDIR%\System32 ,Windows会替换%WINDIR%\SysWow64

函数返回false来告诉你C:\windows\syswow64\inetsrv\metaback不存在,而且最有可能是绝对正确的。

改为:

 os.path.exists("C:\\windows\\sysnative\\inetsrv\\metaback") 

Windows x64的安全性比windows x86要紧密得多, 特别是在当前版本的操作系统下(2008年7月)。

听起来像你的脚本实际上并没有它需要运行的权限。 一般来说,MS锁定了相当多的目录路径(如c:\ inetpub),为了执行任何操作,需要提高权限。

这有很大的原因,这通常被认为是一件非常好的事情。

我相信你会想要标记你的脚本(或者执行它的任何东西)为“以管理员身份运行”,以便让它升级控制。 当然,这可能需要您通过UAC确认执行。

有关更多信息,请访问serverfault.com并在此处询问。