2014-11-14 57 views
0

我寫了一個bat腳本,它將一行添加到hosts文件中。但是我也想刪除已經有相同地址的任何行。例如:通過BAT腳本從主機文件中刪除行

加線 192.168.1.1 wwww.google.com

我要檢查,如果已經有與www.google.com一條線,將其刪除。

有人可以解釋如何做到這一點嗎?

我的.bat添加一行。我需要編輯它以首先刪除一行然後添加這一行。

@ECHO off 
ECHO. >> %WinDir%\System32\drivers\etc\hosts 
FINDSTR /V "217.168.173.1" "%WinDir%\system32\drivers\etc\hosts" 
ECHO 123.456.7.1 www.google.com >> %WinDir%\system32\drivers\etc\hosts 
EXIT 
+0

解決了!我設法解決我的問題,通過遵循[this](http://stackoverflow.com/questions/3666740/windows-batch-how-to-add-host-entries)回答@Rashy的意見並編輯我的要求 – 2014-11-14 14:53:41

回答

0

使用findstr.exe濾除線(/V)。

FINDSTR /V "192.168.1.1" "%HOSTS%" 

這將輸出%HOSTS%的內容,而不包含任何包含192.168.1.1的行。這不會告訴你你想要過濾的行是否在文件中,但會給你一個沒有這個地址的文件。之後,您可以隨時將地址添加到文件的末尾(例如ECHO 192.168.1.1 www.google.com >>%HOSTS%),並確保它不在那裏。

UPDATE

你的工作正在進行中的修改:

@ECHO off 
SETLOCAL 
SET "HOSTS=%WinDir%\System32\drivers\etc\hosts" 
SET "TEMP_HOSTS=%TEMP%\%RANDOM%__hosts" 
FINDSTR /V "217.168.173.1" "%HOSTS%" > "%TEMP_HOSTS%" 
ECHO 123.456.7.1 www.google.com >> "%TEMP_HOSTS%" 
MOVE /Y "%TEMP_HOSTS%" "%HOSTS%" 
EXIT /B 

變化:

  • SETLOCAL防止影響調用CMD會話的環境變量的變化。
  • 將文件的位置保存到變量。
  • 將過濾命令(FINDSTR)的輸出保存到臨時文件(對臨時文件進行所有更改)。
  • 用新創建的臨時文件替換生產主機文件。
  • EXIT /B將退出腳本而不結束您的CMD會話(交互式運行 - 即測試/開發時)。
+0

這對我不起作用,因爲我想創建一個.exe來編輯我的客戶端的hosts文件。附加的作品,但我需要刪除一箇舊的重定向已經存在。 – 2014-11-14 13:46:53

+0

使用這種方法192.168.1.1行不會被刪除,幾個空行被添加到文件中,然後我的新行被添加。 – 2014-11-14 13:52:22

+0

此方法不會刪除192.168.1.1行。它向主機文件添加了幾個空行,然後添加我的新行 – 2014-11-14 13:53:34

0

使用拷貝而不是移動保留的訪問權限

@ECHO off 
SETLOCAL 
SET "HOSTS=%WinDir%\System32\drivers\etc\hosts" 
SET "TEMP_HOSTS=%TEMP%\%RANDOM%__hosts" 
FINDSTR /V "217.168.173.1" "%HOSTS%" > "%TEMP_HOSTS%" 
ECHO 123.456.7.1 www.google.com >> "%TEMP_HOSTS%" 
COPY /b/v/y "%TEMP_HOSTS%" "%HOSTS%" 
EXIT /B