批處理僅允許在指定電腦computername上執(zhí)行的代碼
在實(shí)際的工作環(huán)境中,出于某種需要或特定條件的限制,同一個(gè)批處理腳本會(huì)要求在某些電腦上可以執(zhí)行,在其它電腦上則不能執(zhí)行。具體的判斷條件可能有多種,例如計(jì)算機(jī)名、用戶名、序列號(hào)、日期、時(shí)間、IP地址、MAC地址等。
本文的主要目的是演示幾種不同的思路,實(shí)現(xiàn)通過(guò)判斷計(jì)算機(jī)名來(lái)決定是否允許執(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)是顯而易見(jià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ù)代碼放在下面
pausetest-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(jué)得維護(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ī)器登陸過(guò))
禁止指定QQ號(hào)登錄的bat代碼(前提這個(gè)用戶在這臺(tái)機(jī)器登陸過(guò)),其實(shí)是通過(guò)設(shè)置Registry.db的只讀,導(dǎo)致qq無(wú)法修過(guò)2012-05-05
關(guān)于echo 的問(wèn)題與使用說(shuō)明
(變量替換的妙用)2008-05-05

