批處理僅允許在指定電腦computername上執(zhí)行的代碼
在實(shí)際的工作環(huán)境中,出于某種需要或特定條件的限制,同一個(gè)批處理腳本會(huì)要求在某些電腦上可以執(zhí)行,在其它電腦上則不能執(zhí)行。具體的判斷條件可能有多種,例如計(jì)算機(jī)名、用戶名、序列號(hào)、日期、時(shí)間、IP地址、MAC地址等。
本文的主要目的是演示幾種不同的思路,實(shí)現(xiàn)通過判斷計(jì)算機(jī)名來決定是否允許執(zhí)行批處理腳本。不包含以下內(nèi)容:
怎樣防止bat腳本被篡改
怎樣加密bat腳本
怎樣把bat腳本轉(zhuǎn)換成exe文件
方法1:寫一大推 if 條件判斷
test-1.bat
@echo off if /i "%computername%" equ "ZhangSan" ( goto :AuthPass ) else if /i "%computername%" equ "LiSi" ( goto :AuthPass ) else if /i "%computername%" equ "WangWu" ( goto :AuthPass ) else if /i "%computername%" equ "ZhaoLiu" ( goto :AuthPass ) else ( echo 不符合執(zhí)行條件 pause goto :eof ) :AuthPass echo 符合執(zhí)行條件 REM 業(yè)務(wù)代碼放在下面 pause
這個(gè)方法的缺點(diǎn)是顯而易見的,當(dāng)允許執(zhí)行的計(jì)算機(jī)名很多的時(shí)候,比如成百上千個(gè)計(jì)算機(jī)名都允許執(zhí)行,那么這些if條件就顯得非常臃腫,而且難以維護(hù)。
方法2:讀取白名單的內(nèi)容
把允許執(zhí)行的計(jì)算機(jī)名稱寫入白名單文件 WhiteList.txt 每行一個(gè)計(jì)算機(jī)名,例如:
ZhanSan
LiSi
WangWu
ZhaoLiu
test-2-1.bat
使用 for 命令逐行判斷白名單里面的字符串是否跟當(dāng)前計(jì)算機(jī)名稱相匹配。如果能找到匹配的行,則把自定義變量 AllowFlag 的值更改為 true ;如果找不到匹配的行,則自定義變量 AllowFlag 的值仍然保持為 false 不變。
@echo off set "AllowFlag=false" for /f "delims=" %%i in ('type "WhiteList.txt"') do ( if /i "%computername%" equ "%%i" ( set "AllowFlag=true" ) ) if "%AllowFlag%" equ "false" ( echo 不符合執(zhí)行條件 pause goto :eof ) :AuthPass echo 符合執(zhí)行條件 REM 業(yè)務(wù)代碼放在下面 pause
test-2-2.bat
使用 findstr 命令判斷能否在白名單里面找到當(dāng)前計(jì)算機(jī)名稱。如果能找到,則系統(tǒng)變量 errorlevel 的值為0;如果找不到,則系統(tǒng)變量 errorlevel 的值為1。
@echo off findstr /i /x "%computername%" "WhiteList.txt" >nul if errorlevel 1 ( echo 不符合執(zhí)行條件 pause goto :eof ) :AuthPass echo 符合執(zhí)行條件 REM 業(yè)務(wù)代碼放在下面 pause
有的人喜歡這個(gè)方法,因?yàn)樗麄冇X得維護(hù) txt 文件比較方便。也有的人不喜歡這個(gè)方法,是因?yàn)槌?bat 文件之外還要有個(gè)txt文件,他們更加傾向于把白名單列表也放在 bat 文件里面,于是就有了下面的方法。
方法3:白名單放在bat文件內(nèi)部
test-3.bat
@echo off for /f "delims=:" %%i in ('findstr /n /b /e ":AllowList" "%~f0"') do ( more +%%i "%~f0" > "%temp%\WhiteList.txt" ) findstr /i /x "%computername%" "%temp%\WhiteList.txt" >nul if errorlevel 1 ( echo 不符合執(zhí)行條件 pause goto :eof ) :AuthPass echo 符合執(zhí)行條件 REM 業(yè)務(wù)代碼放在下面 pause goto :eof REM 白名單放在結(jié)尾 :AllowList ZhanSan LiSi WangWu ZhaoLiu
其它幾個(gè)可以作為判斷條件的信息:
用戶名
%username%
日期
%date%
時(shí)間
%time%
主板BIOS序列號(hào)
wmic BIOS get SerialNumber /value wmic BASEBOARD get SerialNumber /value
硬盤序列號(hào)
wmic DISKDRIVE get SerialNumber /value wmic path Win32_PhysicalMedia get SerialNumber /value
批處理獲取多網(wǎng)卡系統(tǒng)中指定網(wǎng)絡(luò)連接對(duì)應(yīng)的MAC地址和IP地址
@echo off REM 設(shè)置網(wǎng)絡(luò)適配器的名稱 set "AdapterName=以太網(wǎng) 2" set "FileTmp=%temp%\ipList.txt" ipconfig /all >"%FileTmp%" for /f "delims=:" %%i in ('findstr /n /c:"%AdapterName%" "%FileTmp%"') do ( set "SkipRow=%%i" goto :FindMAC ) :FindMAC for /f "tokens=2 delims=:" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr "..-..-..-..-..-.."') do ( set "MAC=%%i" goto :FindIP ) :FindIP for /f "tokens=2 delims=:(" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^| findstr "IP"') do ( set "IP=%%i" goto :ShowResult ) :ShowResult set "MAC=%MAC: =%" echo,%MAC% set "IP=%IP: =%" echo,%IP% pause
到此這篇關(guān)于批處理僅允許在指定電腦computername上執(zhí)行的代碼的文章就介紹到這了,更多相關(guān)批處理限制在指定電腦上才能執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
dos 環(huán)境變量延遲擴(kuò)展enabledelayedexpansion詳解
這篇文章主要介紹了dos 環(huán)境變量延遲擴(kuò)展的相關(guān)知識(shí),需要的朋友可以參考一下2016-11-11禁止指定QQ號(hào)登錄的bat代碼(前提這個(gè)用戶在這臺(tái)機(jī)器登陸過)
禁止指定QQ號(hào)登錄的bat代碼(前提這個(gè)用戶在這臺(tái)機(jī)器登陸過),其實(shí)是通過設(shè)置Registry.db的只讀,導(dǎo)致qq無法修過2012-05-05