2013-01-11 112 views
0

VB scripting對我來說是完全陌生的,但是今天降落在寫一個小文件的情況。我需要管理員權限才能運行我的.bat文件。所以我試圖提升管理員權限,如果沒有他們。有了這麼和谷歌的幫助下,我達到了高達:從VB腳本運行批處理文件時出錯

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 

這裏,這.vbsExtractFiles.bat保存在同一文件夾中。我打開了2個命令提示符。一個在管理員模式和其他正常。在Admin模式下運行此腳本時,我會獲得成功。但在正常模式下,首先我會看到一個窗口切換到管理模式,然後按Yes就可以了。然後我得到以下錯誤:

enter image description here

任何人都可以點我到正確的代碼。我得到錯誤在線shell.run "ExtractFiles.bat"。請幫忙!

正如我已經提到的要求,不同的方法也是受歡迎的。在這個問題中,我不確定我如何能夠以管理員模式運行bat文件並且在正常模式下失敗。

回答

0

將Admin 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 
0

取決於你如何啓動的VBScript中的腳本放在不一定是工作目錄的目錄。試試這個:

Set fso = CreateObject("Scripting.FileSystemObject") 
scriptDir = fso.GetParentFolderName(WScript.ScriptFullName) 
shell.run "%COMSPEC% /c """ & fso.BuildPath(scriptDir, "ExtractFiles.bat") & """" 
0

您在命令提示符下輸入什麼?難道......

InstallACS.vbs ExtractFiles.bat 

你的腳本適用於XP x64的就好了(如果重要)別提我將如何運行它 - 從銷售或從控制檯,也有和沒有工作的說法。

相關問題