天天看點

批處理

如每個人的電腦的HOST檔案中都有一條記錄 192.168.8.56   oa.***.com的記錄,請問如何用批處理的方式将此條記錄删除?

@echo off

for /f "tokens=*" %%i in ('type "%windir%\system32\drivers\etc\hosts"') do (

for /f "tokens=1,2" %%j in ("%%i") do (

if "%%j" EQU "192.168.8.56" (

if "%%k" NEQ "oa.***.com" echo.%%i >>temp

) else echo.%%i >>temp

)

copy /y temp "%windir%\system32\drivers\etc\hosts"

del /q temp

需要為使用者增加一條hosts記錄,如何用腳本解決這個問題。

顯然,最簡單的做法是: 

echo 192.168.2.2 www.domainname.com >> %SystemRoot%\system32\drivers\etc\hosts 

也就是将 192.168.2.2www.domainname.com添加到hosts檔案結尾處。

這無疑帶來一個問題,多次運作這個腳本,會在hosts檔案中加入許多無用的垃圾。我們需要加入一個判斷,檢查一下記錄是否已經存在。  

set stHosts=X.X.X.X www.domainname.com  

FOR /F "eol=# tokens=1 delims=" %%i in (%SystemRoot%\system32\drivers\etc\hosts) do if "%stHosts%"=="%%i" exit  

echo %stHosts%>> %SystemRoot%\system32\drivers\etc\hosts 

set指令比較好了解,定義了一個變量,也就是我們要插入的記錄,最後不要留白格。

解釋一下這條For指令:

 FOR /F "eol=# tokens=1 delims=" %%i in (%SystemRoot%\system32\drivers\etc\hosts) do

For /F 指令會讀取hosts檔案,将其分成一行行的文字,根據我們指定的規則進行拆分處理,“eol=#” 忽略過#開頭的行,“tokens=1”傳送每行第一個符号,“delims=”将分隔符集設為空(預設為空格和跳格鍵),其實是将整行記錄傳回,并指派給%%i,然後執行do 後面的指令。

    for指令功能十分強大,可以輕易完成許多看似不可能用批處理完成的任務。在指令行下鍵入 for /? 可以得到完整的幫助說明還有例子。

    由此我們可以得到hosts檔案中的每條記錄,接下來用if來判别一下,看看這條記錄是否為我們要添加的記錄。如果是的話表示記錄已經添加,可以直接退出腳本,什麼也不做。 if語句中 == 兩邊的變量都加了""是為了防止變量為空的情況。

最後一行添加記錄到hosts結尾。

上一篇: 批處理
下一篇: 批處理教程