2014-11-14 2 views
0

호스트 파일에 행을 추가하는 bat 스크립트를 작성했습니다. 그러나 나는 또한 이미 동일한 주소를 가진 라인을 지우고 싶다. 예를 들면 :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

이 해결을 예약 할 수 있습니다! 나는 내 문제를 해결할 수 있었다. [이] (http://stackoverflow.com/questions/3666740/windows-batch-how-to-add-host-entries) @Rashy의 의견과 내 요구 사항에 대한 편집 대답은 –

답변

0

사용 findstr.exe 선을 필터링 (/V).

FINDSTR /V "192.168.1.1" "%HOSTS%" 

그러면 192.168.1.1을 포함하는 행없이 %HOSTS%의 내용이 출력됩니다. 필터하려는 행이 파일에 있는지 여부는 알려주지 않지만 그 주소가없는 파일을 제공합니다. 그 후에 주소가 파일 끝에 추가 될 수 있습니다 (예 : 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 세션에 영향을 미치는 ENV var에 변화를 방지 할 수 있습니다.
  • 파일의 위치를 ​​변수에 저장하십시오.
  • 필터링 명령 (FINDSTR)의 출력을 임시 파일에 저장합니다 (임시 파일을 모두 변경).
  • 프로덕션 호스트 파일을 새로 만든 임시 파일로 바꿉니다.
  • EXIT /B은 대화식으로 실행될 때 (즉 테스트/개발) CMD 세션을 끝내지 않고 스크립트를 종료합니다. 대신 MOVE의
+0

이다. .exe를 만들어 내 클라이언트의 호스트 파일을 편집하려고하기 때문에이 기능이 작동하지 않습니다. 추가 작업이 있지만 이미 존재하는 이전 리디렉션을 삭제해야합니다. –

+0

이 방법을 사용하면 192.168.1.1 행은 삭제되지 않으며 여러 개의 빈 행이 파일에 추가 된 다음 새 행이 추가됩니다. –

+0

이 방법은 192.168.1.1 행을 삭제하지 않습니다. 호스트 파일에 몇 개의 빈 줄을 추가 한 다음 새 줄을 추가합니다. –

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 
관련 문제