我有一个批处理文件,使用以下命令重命名文件夹中的文件:
rename filename.exe filename.bac
这在 Win XP 中效果很好。但在 Vista/7 中,如果批处理文件在 Program Files/ 下运行,除非我以管理员身份运行,否则它不会重命名文件。有没有办法绕过 UAC 并使用它而不需要以管理员身份运行它?
谢谢。
答案1
如果您曾经使用过 Linux,您会注意到,即使您是管理员,您也无法在未获得权限的情况下做您想做的一切。同样的概念也适用于 UAC。即使您以管理员身份登录,默认情况下您仍以标准用户权限运行。因此,您不能直接更改系统文件(例如程序文件目录) - 这正是 UAC 所要阻止的。
你可以禁用 UAC如果你真的愿意的话,但这是一个潜在的安全风险。
答案2
program files
即使您以管理员身份登录,修改目录中的文件夹和文件也需要提升权限。以下是解决您问题的一些潜在方法:
运行批处理文件时始终提升其权限。如果将其用作计划任务,则可以选中复选框
Run this task with highest privileges
。使用 Windows Vista/7海拔 powertoy 脚本提升这一命令
更改该特定子目录中的权限
program files
以允许普通用户重命名文件为此,请转到包含要重命名的文件的目录。右键单击该文件夹,然后单击
Properties
。转到安全选项卡。单击advanced
,然后单击Change Permissions
。单击Add
并选择将运行批处理文件的帐户。授予该帐户必要的权限 - 可能create files
且delete files
至少。然后单击,OK
多次即可关闭所有对话框。指定的帐户现在无需提升权限即可修改该文件夹中的文件。禁用 UAC。这是不建议因为它会使你的系统易受攻击
答案3
查看提升工具
http://technet.microsoft.com/en-us/magazine/2007.06.utilityspotlight.aspx
我曾使用此工具运行各种批处理文件,这些文件通常需要在管理员提示符下运行。事实证明,如果您将动词“runas”传递给 ShellExecute API 或其 COM 等效项,即 Shell.Application 的 ShellExecute 方法,则启动的应用程序将提示提升权限。此工具(由文件 ElevateCommand.inf、elevate.cmd 和 elevate.vbs 组成)将提升命令添加到您的系统。这允许您从命令行、脚本或运行对话框启动提示提升权限的应用程序。例如,以下命令使用记事本打开 Win.ini(在提示提升权限后):
elevate notepad c:\Windows\Win.ini
当将 elevate 命令与 Windows Script Host (WSH)、Windows PowerShell™ 或其他脚本一起使用时,您需要指定脚本主机可执行文件(例如 wscript、cscript 或 powershell)作为应用程序。例如,要运行 vbs,您可以使用以下命令:
elevate wscript “C:\windows\system32\slmgr.vbs” –dli
帮助文本对此进行了解释。使用带 -? 或不带参数的 elevate 可查看帮助文本。
下一个恼人的问题是,大多数 Windows 脚本类型都没有“以管理员身份运行”上下文菜单选项(在资源管理器中右键单击文件时)。唯一的例外是命令 shell 脚本(文件扩展名为 .bat 和 .cmd 的脚本)。所以我开始调查这个问题。许多文件类型的上下文菜单选项都是通过注册表 HKEY_CLASSES_ROOT 部分中“对象”类型的命令键控制的(有关详细信息,请参阅侧栏中的动词和文件关联)。事实证明,如果该命令键名为 runas,则调用的命令将提示提升权限。
Elevate HTML 应用程序 PowerToy (ElevateHTA.inf)
提升 Windows PowerShell 脚本 PowerToy (ElevatePowerShellScript.inf)
提升 WSH 脚本 PowerToy(ElevateWSHScript.inf、elevate.cmd、elevate.vbs)
这些 PowerToy 分别为 HTA、Windows PowerShell 和 Windows Script Host 文件类型添加了以管理员身份运行的 Explorer 上下文菜单项。ElevateWSHScript.inf 还添加了以命令提示符身份以管理员身份运行的菜单项。(安装 ElevatePowerShellScript.inf 之前,请阅读其中的说明。)
确保将电源玩具解压到 c:\Windows\System32 中,或者如果您将该工具放在其他地方,请将目录添加到 $PATH 变量中,以便您可以轻松地在批处理脚本中调用它。