VB scripting
对我来说完全陌生,但今天陷入了写一个小小的情境。我需要管理员权限来运行我的.bat
文件。所以我试图提升为管理员权利,如果没有他们。在SO和谷歌的帮助下,我达到了:
Function Length()
Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.length = 0 Then
Set ObjShell = CreateObject("Shell.Application")
ObjShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """" & " RunAsAdministrator", , "runas", 1
Else
Dim shell
set shell=createobject("wscript.shell")
shell.run "ExtractFiles.bat"
End If
End Function
Length
此处,此.vbs
和ExtractFiles.bat
保存在同一文件夹中。我打开了2个命令提示符。一个在管理员模式和其他正常。在管理员模式下运行此脚本thorugh命令提示符时,我获得了成功。但在正常模式下,首先我会有一个窗口切换到管理模式,然后按Yes
。然后我得到以下错误:
任何人都可以指出我正确的代码。我在第shell.run "ExtractFiles.bat"
行收到错误。请帮忙!
正如我也提到的要求,也欢迎采用不同的方法。在这个问题上,我不知道如何在管理模式下运行bat文件并在正常模式下失败。
答案 0 :(得分:0)
将管理员VBS代码添加到您的bat文件中。这是我的工作惯例。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Admin <Return> [Needed] [Success]
:: Check for Administrator privileges and request privileges if Needed 'true'.
:::: Usage: call :Admin xReturn true
:: Return success value, if user is Admin. Default `true` if Success not set.
setlocal
set "xVBUAC=%Temp%\AdminUAC.vbs"
set "xSuccess=true"
set "xAdmin=false"
if not "%~3"=="" set "xSuccess=%~3"
:: Check for Access
::net session >nul 2>&1
>nul 2>&1 "%SystemRoot%\system32\cacls.exe" "%SystemRoot%\system32\config\system"
if %ErrorLevel% EQU 0 set "xAdmin=%xSuccess%"
:: Execute UAC
if /i not "%xAdmin%"=="%xSuccess%" if not "%~2"=="" if /i "%~2"=="true" (
echo Set UAC = CreateObject^("Shell.Application"^) > "%xVBUAC%"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%xVBUAC%"
if exist "%xVBUAC%" (
"%xVBUAC%"
rem if %ErrorLevel% EQU 5 echo Access Denied. Launching UAC.
del "%xVBUAC%"
)
)
endlocal & if not "%~1"=="" set "%~1=%xAdmin%"
goto :eof
如何使用
:: Example Admin check
@echo off
setlocal EnableExtensions
call :Admin xReturn true 1
if not "%xReturn%"=="1" goto End
:: Do my .bat stuff here.
goto End
:: TODO Place the admin function here.
:End
答案 1 :(得分:0)
根据您启动VBScript的方式,脚本所在的目录不一定是工作目录。试试这个:
Set fso = CreateObject("Scripting.FileSystemObject")
scriptDir = fso.GetParentFolderName(WScript.ScriptFullName)
shell.run "%COMSPEC% /c """ & fso.BuildPath(scriptDir, "ExtractFiles.bat") & """"
答案 2 :(得分:0)
您在命令提示符中输入了什么?是吗......
InstallACS.vbs ExtractFiles.bat
你的脚本在XP x64上运行得很好(如果那么重要)从不介意我将如何运行它 - 从销售或控制台,也可以使用和不使用参数。