我有一个 .CMD 文件,我通过在 Windows 资源管理器中右键单击文件来运行它;我单击的文件将作为参数传递给 .CMD 文件。.CMD 文件进行一些处理,然后将文件从一个文件夹复制到另一个文件夹。它在 Windows XP 上运行良好;在 Windows 8 上,当“复制”命令运行时,它会返回错误消息“访问被拒绝”。
如果我使用 Windows 资源管理器复制文件,则会弹出一个对话框,其中显示“您需要提供管理员权限才能复制到此文件夹”。我单击“继续”,文件就被复制了。
我不知道 UAC 的细节,但我知道我不想更改权限以允许文件在无人干预的情况下被复制。也就是说,我不希望整个 .CMD 文件以管理员身份运行。我想右键单击输入文件,运行 .CMD 文件,并在“复制”命令尝试运行时显示对话框;然后我将单击“继续”以仅允许复制命令以管理员权限运行。(如果 .CMD 文件中还有其他地方复制了文件,或者任何其他需要管理员权限的操作,我希望再次出现对话框,询问是否可以以管理员身份运行该操作)。
这能做到吗?
答案1
恐怕您要做的事情没有简单的解决方案。
cmd
交互性不强,并且脚本不需要人工干预就能运行。- 另一个限制在于 UAC 的工作方式:进程只能在启动时提升权限;进程启动后,它要么具有管理员权限,要么不具有。
因此,对于您而言,对于每个可能导致 UAC 提示的命令,您必须以两种方式进行编码:脚本具有不带权限的复制权限和带权限的复制权限。
除非您有额外的工具可以为您处理提升,否则您无法编程提升cmd
,然后继续执行以常规权限失败的命令。
如果您对其在 Windows XP 上的运行方式感到满意,那么最简单的解决方案就是以管理员权限运行您的脚本。
如果您的脚本的目的是复制单个文件,并且这就是脚本所做的全部工作,那么创建与 UAC 配合良好的实用程序似乎有些小题大做。
您可以为脚本创建快捷方式 .lnk 文件。然后在快捷方式属性中,捷径选项卡,点击先进的按钮并检查以管理员身份运行。 点击好的两次以保存更改
当你点击这样的快捷方式时,你会看到 UAC 提示Windows 命令处理器(因为它执行.cmd
文件)。
答案2
您需要以管理员身份打开命令提示符。
打开任务管理器,方法是打开运行对话框(同时按下Win+ R)并输入任务管理器,或者按Ctrl+ Shift+ Esc。
点击文件-->新任务。
勾选使用管理权限创建此任务。如果您没有看到此信息,则表示您的用户帐户是标准帐户,而不是管理员帐户。由于您可以点击 UAC 提示,因此我假设您是管理员。
类型命令然后单击“确定”。您应该能够从此命令提示符运行复制命令,而不会收到任何权限错误。
或者,您可以按Win+X调出高级用户菜单,然后选择
并选择命令提示符(管理员)从那里(或按 A)