Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка файла host

Ответить
Настройки темы
CMD/BAT - Проверка файла host

Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Уважаемые форумчане, подсобите, пожалуйста,

Я хочу, чтобы при запуске CMD-файла проверялся файл host на наличие строчек:
127.0.0.1 rad.msn.com
127.0.0.1 apps.skype.com
127.0.0.1 download.skype.com
127.0.0.1 g.msn.com
127.0.0.1 cdn.eyewonder.com

Если строчки присутствуют, то CMD-файл исполняется дальше, если строчек нет, они добавляются и CMD-файл исполняется дальше.

Подскажите, как это реализовать???

Отправлено: 11:01, 24-04-2015

 

Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Для полной замены host я использую скрипт:

Код: Выделить весь код
@echo off

@echo # Copyright (c) 1993-2009 Microsoft Corp. > %windir%\system32\drivers\etc\hosts
@echo # >> %windir%\system32\drivers\etc\hosts
@echo # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. >> %windir%\system32\drivers\etc\hosts
@echo # >> %windir%\system32\drivers\etc\hosts
@echo # This file contains the mappings of IP addresses to host names. Each >> %windir%\system32\drivers\etc\hosts
@echo # entry should be kept on an individual line. The IP address should >> %windir%\system32\drivers\etc\hosts
@echo # be placed in the first column followed by the corresponding host name. >> %windir%\system32\drivers\etc\hosts
@echo # The IP address and the host name should be separated by at least one >> %windir%\system32\drivers\etc\hosts
@echo # space. >> %windir%\system32\drivers\etc\hosts
@echo # >> %windir%\system32\drivers\etc\hosts
@echo # Additionally, comments (such as these) may be inserted on individual >> %windir%\system32\drivers\etc\hosts
@echo # lines or following the machine name denoted by a '#' symbol. >> %windir%\system32\drivers\etc\hosts
@echo # >> %windir%\system32\drivers\etc\hosts
@echo # For example: >> %windir%\system32\drivers\etc\hosts
@echo # >> %windir%\system32\drivers\etc\hosts
@echo #      102.54.94.97     rhino.acme.com          # source server >> %windir%\system32\drivers\etc\hosts
@echo #       38.25.63.10     x.acme.com              # x client host >> %windir%\system32\drivers\etc\hosts
@echo. >> %windir%\system32\drivers\etc\hosts
@echo # localhost name resolution is handled within DNS itself. >> %windir%\system32\drivers\etc\hosts
@echo #	127.0.0.1       localhost >> %windir%\system32\drivers\etc\hosts
@echo #	::1             localhost >> %windir%\system32\drivers\etc\hosts
@echo. >> %windir%\system32\drivers\etc\hosts
@echo 127.0.0.1 download.skype.com >> %windir%\system32\drivers\etc\hosts

ipconfig /flushdns
pause
Но мне надо, чтобы проверялось наличие конкретных строчек.

Отправлено: 11:06, 24-04-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\Песочница\069\list.txt
set sDestFile=%SystemRoot%\system32\drivers\etc\hosts

if exist "%sSourceFile%" (
	if exist "%sDestFile%" (
		for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
			type "%sDestFile%" | >nul 2>&1 find.exe /i "%%~i" || (
				echo Add string [%%~i].
				>>"%sDestFile%" echo %%~i
			)
		)
	) else (
		echo Can't find destination file [%sDestFile%].
		exit /b 2
	)
) else (
	echo Can't find source file [%sSourceFile%].
	exit /b 1
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:04, 24-04-2015 | #3


Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


А как сделать без дополнительного файла list.txt???
Чтобы строчки были прописаны в cmd.

Отправлено: 13:22, 24-04-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Sisin, по-хорошему, конечно, вместо «find.exe» надо пользовать «findstr.exe» с указанием в маске начала и конца строки, наподобие:
Код: Выделить весь код
			type "%sDestFile%" | >nul 2>&1 findstr.exe /i /r /c:"^%%~i$" || (
а то попадётся в исходном файле что-нибудь этакое:
Код: Выделить весь код
127.0.0.1 g.msn.com.ru
127.0.0.1 g.msn.com
— и будет ошибочно определено, что вторая строка уже есть в целевом файле (по совпадению подстроки).

Цитата Sisin:
А как сделать без дополнительного файла list.txt???
Чтобы строчки были прописаны в cmd. »
А чем оно Вам мешает — отдельным файлом? Возни чуть больше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:27, 24-04-2015 | #5


Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Цитата Iska:
А чем оно Вам мешает — отдельным файлом? Возни чуть больше. »
а как сделать относительный путь до list.txt???

Отправлено: 13:35, 24-04-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Sisin:
а как сделать относительный путь до list.txt??? »
Относительно самого пакетного файла? Например, так:
Код: Выделить весь код
set sSourceFile=%~dp0list.txt
— в том же каталоге, что и пакетный файл.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:51, 24-04-2015 | #7


Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


У меня после запуска дублируются строчки.
т.е. 127.0.0.1 download.skype.com уже была, а после запуска таких строчек стало две.

Подумал, может пробелы в конце мешают, но нет не из-за них...

Последний раз редактировалось Sisin, 24-04-2015 в 14:05.


Отправлено: 13:58, 24-04-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Sisin:
У меня после запуска дублируются строчки. »
Упакуйте в архив Ваш файл «host» и файл «list.txt». Выложите архив сюда или на RGhost.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:10, 24-04-2015 | #9


Аватара для Sisin

Старожил


Сообщения: 345
Благодарности: 9

Профиль | Отправить PM | Цитировать


Я разобрался, они были в разных кодировках.

Спасибо, Iska.

Отправлено: 14:18, 24-04-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка файла host

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - CMD проверка создания файла за (сегодня вчера) с созданием флагового файла yamixon Скриптовые языки администрирования Windows 5 17-03-2015 08:40
[решено] svchost.exe Два файла host в папке ect cir1us Лечение систем от вредоносных программ 17 16-10-2011 14:05
CMD/BAT - [решено] Проверка размера файла 4zz Скриптовые языки администрирования Windows 4 18-08-2011 17:38
VBS/WSH/JS - Проверка существования файла admin-nsk Скриптовые языки администрирования Windows 3 13-10-2010 12:25
CMD/BAT - Скачивание файла и проверка на отличия от файла на сервере. maslovt Скриптовые языки администрирования Windows 2 08-05-2010 19:54




 
Переход