批处理脚本学习笔记2--获取管理员权限并进入指定目录

最近在学习python,通过notepad++ 调测python,需要安装一些第三方库文件。在cmd下用pip install时没有权限。需要通过管理员权限打开cmd才可以。为防后续仍有此类权限问题,因此想打开cmd时默认都获得管理员权限。
通过notepad++在运行时可以带入一些内置的变量,故想写一个bat,在notepad++中调测.py时,可以直接从.py文件所在目录来运行。经过一翻搜寻,已经有大牛写好的通过批处理获取管理员权限。一番窃喜,看样子这个方案可行,马上行动起来……
过程中遇到很多问题,折腾一翻最后终于搞定。在调测过程中发现如果直接运行bat时会报错误(原来是执行时没有带入指定的目录参数,cd /d 后面的参数为空),故加了个参数判断,没有指定目录时则进入bat文件所在目录。

执行bat时,如果后面带有参数(指定要进入的目录),则获取权限后进入到指定目录。如果未到参数,则进入到bat所在文件夹目录。

@echo off
CLS
::设置指定的目录为执行bat时传入的第一个参数
set USER_DIRECTORY=%1

:init
::获取批处理文件名
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
::将预生成的vbs文件命名与批处理文件同名
set "vbsGetPrivileges=%temp%\%batchName%.vbs"
setlocal EnableDelayedExpansion
goto checkPrivileges


:checkPrivileges
::判断当前是否取得admin权限
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )


:getPrivileges
ECHO.
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
::ECHO args = "" >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "%batchPath%", args, "", "runas", 1 >> "%vbsGetPrivileges%"

::打开一个cmd窗口执行vbs文件,并带入全部参数
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
goto end


:gotPrivileges
::设置%cd%为当前目录
setlocal & pushd .

::删除生成的vbs文件%vbsGetPrivileges%
if exist "%vbsGetPrivileges%" (del "%vbsGetPrivileges%" 1>nul 2>nul)

::判断用户指定目录是否为空
if '%USER_DIRECTORY%x' == 'x' (goto CURRENT_DIRECTORY) else (goto User_DIRECTORY)
goto end

:CURRENT_DIRECTORY
::进入当前所在目录
cmd /k cd /d %~dp0
goto end

:User_DIRECTORY
::进入用户指定目录
cmd /k cd /d %USER_DIRECTORY%
goto end

:end
exit /B
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值