%1?mshta?vbscript之管理員權(quán)限運(yùn)行bat的解讀
一、提取代碼
注意功能就是將當(dāng)前bat的執(zhí)行提升為管理員,因?yàn)橛行┎僮髦挥泄芾韱T才可以執(zhí)行,否則就會(huì)出現(xiàn)錯(cuò)誤,為了方便用戶(hù)特將這句話(huà)寫(xiě)到bat的開(kāi)頭,利用vbs實(shí)現(xiàn)提取運(yùn)行當(dāng)前的bat文件
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit cd %~dp0 %~d0 taskkill /im python.exe /f taskkill /im java.exe /f taskkill /im node.exe /f taskkill /im npm.exe /f python lanuch_python.py
或者
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
二、資料
批處理,%~d0 cd %~dp0 代表什么意思 批處理,%~d0 cd %~dp0 代表什么意思 ~dp0 “d”為Drive的縮寫(xiě),即為驅(qū)動(dòng)器,磁盤(pán)、“p”為Path縮寫(xiě),即為路徑,目錄 cd是轉(zhuǎn)到這個(gè)目錄,不過(guò)我覺(jué)得cd /d %~dp0 還好些 選項(xiàng)語(yǔ)法: ~0 - 刪除任何引號(hào)("),擴(kuò)充 %0 %~f0 - 將 %0 擴(kuò)充到一個(gè)完全合格的路徑名(“f”是file,即文件) %~d0 - 僅將 %0 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào) %~p0 - 僅將 %0 擴(kuò)充到一個(gè)路徑 %~n0 - 僅將 %0 擴(kuò)充到一個(gè)文件名(“n”是name 文件名) %~x0 - 僅將 %0 擴(kuò)充到一個(gè)文件擴(kuò)展名 %~s0 - 擴(kuò)充的路徑只含有短名(“s”為Short,短的) %~a0 - 將 %0 擴(kuò)充到文件的文件屬性(“a”為attribute,即屬性) %~t0 - 將 %0 擴(kuò)充到文件的日期/時(shí)間(“t”time) %~z0 - 將 %0 擴(kuò)充到文件的大小(Size 大小) %~PATH:0?查找列在路徑環(huán)境變量的目錄,并將 PATH:0 - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充 到找到的第一個(gè)驅(qū)動(dòng)器號(hào)和路徑。 %~ftza0 - 將 %0 擴(kuò)充到類(lèi)似輸出線(xiàn)路的 DIR %0為當(dāng)前批處理文件 如果0換成1為第一個(gè)文件,2為第2個(gè)
三、分析
1、“cd %~dp0”
分析:cd 到 該腳本所在的目錄下。
2、“%~d0”
分析:僅將 %0 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)
3、“%1”
分析:%1 指批處理文件名后加的以空格分隔的字符串
4、“%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit”
分析:當(dāng)需要在Windows中使用管理員身份運(yùn)行cmd時(shí),可以使用vbs來(lái)進(jìn)行
5、"^&chr(34)^&"
分析:雙引號(hào)的ASCII碼
淺談批處理獲取管理員運(yùn)行權(quán)限的幾種方法
很多用了Win10版本系統(tǒng)的人都會(huì)發(fā)現(xiàn),Windows對(duì)程序的運(yùn)行權(quán)限是控制得更加嚴(yán)格了,即使你將UAC控制放至最低,如果沒(méi)有特別賦予外來(lái)程序管理員運(yùn)行權(quán)限的話(huà),很多程序都會(huì)運(yùn)行出錯(cuò),包括很多用于系統(tǒng)維護(hù)的批處理程序由于運(yùn)行權(quán)限不夠都會(huì)導(dǎo)致出錯(cuò),最簡(jiǎn)單的方法莫過(guò)于用右鍵點(diǎn)擊程序,然后選擇“以管理員身份運(yùn)行”,對(duì)于那些需要經(jīng)常使用的程序,我們可以進(jìn)入程序的屬性里面勾選上“以管理員身份運(yùn)行”,這樣每次點(diǎn)擊它都會(huì)直接以管理員身份運(yùn)行了。以上這些都是對(duì)單個(gè)程序的臨時(shí)解決措施。那么對(duì)于眾多的批處理程序,每次都用右鍵覺(jué)得很麻煩,又不可能到每個(gè)程序的屬性里面去設(shè)置一下,效率低下,那有沒(méi)有辦法讓批處理程序能夠自動(dòng)獲取管理員運(yùn)行權(quán)限呢,讓其直接雙擊即可實(shí)現(xiàn)正常運(yùn)行,答案當(dāng)然是有的。下面是我從網(wǎng)上找到的幾種提升批處理運(yùn)行權(quán)限的方法,另外也有一些本人自己摸索出來(lái)的方法。
方法1:借用VBS腳本
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
方法2:借用VBS腳本
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit exit /B
方法3:借用VBS腳本
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs" >nul exit /B
方法4:借用第三方程序
nircmd elevate cmd /c "%0" exit /B
方法5:runas命令
runas /noprofile /user:Administrator "%0" exit /B
以上是批處理獲取管理員權(quán)限的5種方法,只要把這幾個(gè)命令放進(jìn)批處理優(yōu)先執(zhí)行即可,當(dāng)然還要加上判斷是否已經(jīng)獲取管理員權(quán)限的語(yǔ)句,否則批處理就會(huì)無(wú)限循環(huán)下去。判斷批處理是否已獲取管理員權(quán)限的方法,網(wǎng)上用的最多的是下面這句命令:
以方法1為例:
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin) :UACPrompt %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit :UACAdmin echo 已獲取管理員權(quán)限
用cacls命令來(lái)判斷管理員權(quán)限固然不錯(cuò),但經(jīng)過(guò)實(shí)踐我發(fā)現(xiàn)cacls返回的errorlevel值不夠穩(wěn)定,經(jīng)常會(huì)變換出其他不可預(yù)知的錯(cuò)誤碼,造成判斷有誤,導(dǎo)致批處理進(jìn)入死循環(huán)。當(dāng)然也有人采用能否往系統(tǒng)目錄(比如system32)寫(xiě)入文件的方法來(lái)判斷,我覺(jué)得這些都不夠好,后來(lái)我發(fā)現(xiàn)使用bcdedit命令來(lái)判斷比較準(zhǔn)確,一般情況下它只會(huì)返回兩個(gè)錯(cuò)誤碼0和1,很少見(jiàn)到有其他值出現(xiàn),目前它是我覺(jué)得用來(lái)判斷管理員權(quán)限最好的方法。
前3種方法是使用了VBS腳本,方法1最簡(jiǎn)潔,一行代碼就搞定了,但我發(fā)現(xiàn)Win10系統(tǒng)似乎不支持短文件名,一旦文件路徑出現(xiàn)空格,該命令就會(huì)出錯(cuò);方法2也不賴(lài),只有兩行代碼,在Win10系統(tǒng)能穩(wěn)定運(yùn)行;方法3比較復(fù)雜,還會(huì)產(chǎn)生臨時(shí)文件,但也能在Win10系統(tǒng)穩(wěn)定運(yùn)行;第4種方法使用了第三方程序,不會(huì)產(chǎn)生臨時(shí)文件,代碼也簡(jiǎn)單,但你得先下載nircmd.exe這個(gè)工具;第5種方法采用了系統(tǒng)自帶的命令runas來(lái)實(shí)現(xiàn),理論上是沒(méi)問(wèn)題的,但實(shí)際上比較難實(shí)現(xiàn),首先要求Administrator管理員賬戶(hù)必須已經(jīng)啟用,其次還必須設(shè)置有管理員密碼,否則都會(huì)得到拒絕的提示。
以上5種方法都可以提升批處理的運(yùn)行權(quán)限,可根據(jù)具體情況選擇最合適的方法,我比較喜歡方法2,代碼簡(jiǎn)潔,運(yùn)行穩(wěn)定,不會(huì)產(chǎn)生臨時(shí)文件,其次方法4也不錯(cuò)。如果您有更好的批處理提權(quán)方法,也可以跟大家一起分享!共同進(jìn)步!
附:批處理獲取管理員權(quán)限完整代碼
@echo off if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0 bcdedit >nul if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin) :UACPrompt %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit exit /B :UACAdmin cd /d "%~dp0" echo 當(dāng)前運(yùn)行路徑是:%CD% echo 已獲取管理員權(quán)限 pause
到此這篇關(guān)于%1 mshta vbscript之管理員權(quán)限運(yùn)行bat的解讀的文章就介紹到這了,更多相關(guān)%1 mshta vbscript內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Append、Debug、Diskcomp命令的使用說(shuō)明
Append、Debug、Diskcomp命令的使用說(shuō)明...2007-03-03Windows系統(tǒng)使用bat批量修改文件名的使用示例
bat是非常好用的批處理工具,很多時(shí)候需要批量的修改文件名稱(chēng),本文就來(lái)介紹一下Windows系統(tǒng)使用bat批量修改文件名的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10hh.exe 隱藏參數(shù) chm反編譯命令參數(shù)
一直都是用國(guó)外的小軟件,反編譯chm文件,沒(méi)想到用微軟自帶的其實(shí)系統(tǒng)里面就有的命令就可以實(shí)現(xiàn)了,效果也好,但就是沒(méi)有索引比較痛苦。2009-09-09