@echo off &setlocal EnableExtensions DisableDelayedExpansion
:: Change the working directory to the directory of the batch file.
:: If the first passed argument was ~e~ (that is, the batch file was called from the VBScript)
:: then shift the parameters by one and continue at label :elevated
cd /d "%~dp0"&if "%~1"=="~e~" (shift&goto :elevated)
:: Assign the passed arguments to variable param.
set "param=%*"
:: NET SESSION fails if the batch code doesn't run with elevated permissions.
:: Assign variable __verb to "open" if the batch file runs elevated or to "runas" if it doesn't run elevated
>nul 2>&1 net session &&(set "__verb=open")||(set "__verb=runas")
:: Assign the name of the VBScript to variable vbs.
:: Assign the full name of the batch file to variable me.
:: Enable delayed variable expansion.
set "vbs=%temp%\uac.vbs"&set "me=%~f0"&setlocal enabledelayedexpansion
:: If arguments were passed, prepare them to be passed from within the VBScript by doubling the quotation marks.
if defined param set "param=!param:"=""!"
:: Write the VBScript. The ShellExecute method will run the batch file in a cmd.exe process where ~e~ will be passed as
:: first argument followed by the original arguments (saved in param). The UAC will be invoked if __verb was set to "runas".
:: Elsewise the UAC will not be invoked. For further information about the ShellExecute method see:
:: https://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx
>"!vbs!" echo CreateObject("Shell.Application").ShellExecute "!comspec!", "/c """"!me!"" ~e~ !param!""", "", "%__verb%", 0
:: Run the VBScript in a cscript.exe process.
:: Delete the VBScript file.
:: Quit the batch execution.
cscript //nologo "!vbs!"&del "!vbs!"&goto :eof
:elevated
::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: Do your elevated stuff here...
4条答案
按热度按时间7rtdyuoh1#
使用VBScript
运行这将运行您的批处理文件隐藏。
pdkcd3nj2#
我不喜欢VBScript解决方案。
下载nircmd.exe并将其复制到
%systemroot%\system32
文件夹中,然后将以下命令添加到批处理的第一行:您也可以通过
title
命令更改批处理文件终端窗口的标题,以避免隐藏所有cmd
窗口,如下所示:pokxtpni3#
此VBScript在%Temp%中创建批处理文件的副本,静默执行,然后删除
9udxz4iz4#
我知道这个帖子很旧,但这里是我的解决方案,来自dostips的一个德国人帮助我编写了这个脚本,它非常有用。