批處理僅允許在指定電腦computername上執(zhí)行的代碼
在實際的工作環(huán)境中,出于某種需要或特定條件的限制,同一個批處理腳本會要求在某些電腦上可以執(zhí)行,在其它電腦上則不能執(zhí)行。具體的判斷條件可能有多種,例如計算機名、用戶名、序列號、日期、時間、IP地址、MAC地址等。
本文的主要目的是演示幾種不同的思路,實現(xiàn)通過判斷計算機名來決定是否允許執(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è)務代碼放在下面 pause
這個方法的缺點是顯而易見的,當允許執(zhí)行的計算機名很多的時候,比如成百上千個計算機名都允許執(zhí)行,那么這些if條件就顯得非常臃腫,而且難以維護。
方法2:讀取白名單的內(nèi)容
把允許執(zhí)行的計算機名稱寫入白名單文件 WhiteList.txt 每行一個計算機名,例如:
ZhanSan
LiSi
WangWu
ZhaoLiu
test-2-1.bat
使用 for 命令逐行判斷白名單里面的字符串是否跟當前計算機名稱相匹配。如果能找到匹配的行,則把自定義變量 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è)務代碼放在下面 pause
test-2-2.bat
使用 findstr 命令判斷能否在白名單里面找到當前計算機名稱。如果能找到,則系統(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è)務代碼放在下面 pause
有的人喜歡這個方法,因為他們覺得維護 txt 文件比較方便。也有的人不喜歡這個方法,是因為除了 bat 文件之外還要有個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è)務代碼放在下面 pause goto :eof REM 白名單放在結尾 :AllowList ZhanSan LiSi WangWu ZhaoLiu
其它幾個可以作為判斷條件的信息:
用戶名
%username%
日期
%date%
時間
%time%
主板BIOS序列號
wmic BIOS get SerialNumber /value wmic BASEBOARD get SerialNumber /value
硬盤序列號
wmic DISKDRIVE get SerialNumber /value wmic path Win32_PhysicalMedia get SerialNumber /value
批處理獲取多網(wǎng)卡系統(tǒng)中指定網(wǎng)絡連接對應的MAC地址和IP地址
@echo off REM 設置網(wǎng)絡適配器的名稱 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
到此這篇關于批處理僅允許在指定電腦computername上執(zhí)行的代碼的文章就介紹到這了,更多相關批處理限制在指定電腦上才能執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
dos 環(huán)境變量延遲擴展enabledelayedexpansion詳解
這篇文章主要介紹了dos 環(huán)境變量延遲擴展的相關知識,需要的朋友可以參考一下2016-11-11禁止指定QQ號登錄的bat代碼(前提這個用戶在這臺機器登陸過)
禁止指定QQ號登錄的bat代碼(前提這個用戶在這臺機器登陸過),其實是通過設置Registry.db的只讀,導致qq無法修過2012-05-05