Войти

Показать полную графическую версию : [решено] Запись в файл hosts с помощью bat-файла


Страниц : [1] 2

SibAgent
14-05-2010, 19:47
Доброго времени суток!
Помогите написать батник который будет вносить указанные домены с ай-пи 127.0.0.1 в файл hosts,

например такого содержания:

127.0.0.1 vkontakte.ru
127.0.0.1 odnoklasniki.ru
127.0.0.1 mail.ru

Заранее спасибо. :)

seriych
14-05-2010, 20:51
if exist %systemroot%\SysWOW64 (
set hosts=%systemroot%\SysWOW64\drivers\etc\hosts
) else (
set hosts=%systemroot%\System32\drivers\etc\hosts
)
cacls %hosts% /E /G All:F
cacls %hosts% /E /G ‚бҐ:F
attrib -s -r -h %hosts%
(echo.
echo #
echo 127.0.0.1 vkontakte.ru
echo 127.0.0.1 odnoklasniki.ru
echo 127.0.0.1 mail.ru
)>>%hosts%
cacls %hosts% /E /R All
cacls %hosts% /E /R ‚бҐ
ipconfig /flushdns

Если набираешь в дос-кодировке, то ‚бҐ замени на Все

Серафима Аркадьевна
14-05-2010, 20:54
файл filename1.txt
@echo off
copy /Y /A %windir%\system32\drivers\etc\hosts + e:\filename2.txt %windir%\system32\drivers\etc\hosts

файл filename1.txt на диске E: в корне
там же filename2.txt:
127.0.0.1 vkontakte.ru
127.0.0.1 odnoklasniki.ru
127.0.0.1 mail.ru

BATCH filename1.txt

SibAgent
14-05-2010, 21:35
Спасибо большое, все работает :up:

Осталось забить все блокируемые хосты все будет :up

seriych
14-05-2010, 21:48
SibAgent,
А еще можно сделать перенаправление, например, на сайт своей компании, чтобы люди понимали, что надо работать на работе, а не по контактам лазить :) (если, конечно, это для работы делаешь)

SibAgent
14-05-2010, 22:24
вот как раз для работы и делаю, а то сидят в рабочее время по социалкам, а как перенаправление сделать?

avolkov2009
14-05-2010, 22:57
а как перенаправление сделать »
У нас организовано при помощи Kerio, но, думаю, можно найти и какое-нибудь бесплатное решение. В принципе, такая защита - удел интернет-шлюза, а не конечной рабочей станции (что касается предприятия).

seriych
14-05-2010, 23:40
SibAgent,
пропиши вместо 127.0.0.1 айпишник сайта куда перенаправлять надо. Чтобы узнать айпи, набери в консоли ping адрес сайта. Например, ping ya.ru выдаст айпишник 213.180.204.3 и если мы хотим, чтобы при наборе в браузере mail.ru выдавался сайт ya.ru, то в хостс надо добавить 213.180.204.3 mail.ru. Только это можно обойти через прокси или если опера установлена, то просто нажав кнопку опера-турбо.

amel27
15-05-2010, 06:04
cacls %hosts% /E /G All:F »
- смысл cacls?.. если прав нет, то расширить их не выйдет, если есть - можно сразу редактировать;
- хорошо бы еще добавить FIND для предотвращения дублей/разрастания файла

NiOl
18-05-2010, 18:11
- смысл cacls?.. если прав нет, то расширить их не выйдет, если есть - можно сразу редактировать;
- хорошо бы еще добавить FIND для предотвращения дублей/разрастания файла »

1. Понял идею при попытке реализовать п.2
2. Вот батник с проверкой на наличие уже существующих записей и с разблокировкой доменов (в текстовике вместо адреса ставится дефис, т.е. например так: "- youtube.com"), но наткнулся на то, что ДОСовские команды при попытке хоть что-либо сделать с "hosts." выдают "Access is denied."

@echo off
SetLocal EnableExtensions

set NewHosts=AddHostsProbe.txt

if not "%1"=="" set NewHosts=%1
if not exist %NewHosts% exit 1
set Hosts="%windir%\system32\drivers\etc\hosts"
copy %Hosts% %Hosts%.tmp

call :List %NewHosts%
move /Y %Hosts%.tmp %Hosts%
exit

:List
for /f "usebackq tokens=1,2 eol=#" %%A in ("%~1") do call :Search %%A %%B
exit /b

:Search
set Add=Y
for /f "tokens=1 eol=#" %%C in ('findstr /i /c:"%2" %Hosts%.tmp') do call :Found %1 %2 %%C
if %Add%==Y echo %1 %2>>%Hosts%.tmp
exit /b

:Found
if %1==%3 (set Add=N) else (
findstr /i /v /c:"%2" %Hosts%.tmp >%~dpn0.tmp
del /f %Hosts%.tmp
move /Y %~dpn0.tmp %Hosts%.tmp
if %1==- set Add=N
)
exit /b

sov44
18-06-2011, 17:50
Всю голову сломал, не могу с помощью bat записать в текстовый файл строку с символами < >

>>"setup.ini" Echo ; LOCALCACHEDRIVE <predefined> Option to specify a drive to cache

Petya V4sechkin
18-06-2011, 17:56
sov44, для экранирования спецсимволов используется ^
Echo ^>^>"setup.ini" Echo ; LOCALCACHEDRIVE ^<predefined^> Option to specify a drive to cache>file.txt

А почему в этой теме спрашиваете?

sov44
18-06-2011, 18:12
Petya V4sechkin, спасибо!
А почему в этой теме спрашиваете? »
ничего похожего не нашел :)

Shpionus
10-02-2012, 23:20
Не знаю в этой теме надо об этом писать или новую лучше создать....
В общем вопрос:
Как CMD файлом добавлять строки в файл C:\Windows\System32\drivers\etc\hosts в Windows 7? Семёрка упорно не даёт редактировать этот файл. Запуск CMD файла от имени админа не помогает.

Shpionus
11-02-2012, 00:01
Так первый вопрос снимается, на системе с отключенным контролем учётных записей И БЕЗ АНТИВИРУСА данный файл заменяется спокойно.
Теперь вопрос уже более по данной теме, как сделать так чтобы нужные строки вносились в данный файл не заменяя весь файл, то есть если до этого там уже были какие-то адреса, то они не должны удаляться, CMD должен ДОПИСЫВАТЬ нужные адреса после уже имеющихся в файле hosts, ну и конечно при повторном запуске CMD записи не должны дублироваться, то есть если произошёл повторный запуск CMD то изменений в hosts не будет внесено.

Я не силён в командах CMD, прочёл данную тему и плохо понял что делают те команды...

sov44
11-02-2012, 01:00
как сделать так чтобы нужные строки вносились в данный файл не заменяя весь файл »


call:Install ххх.com
call:Install www.ххх.com

:Install
setlocal enableextensions enabledelayedexpansion
set sHostFile=%SystemRoot%\System32\drivers\etc\hosts
echo.>>"%sHostFile%"
set sHost=%~1
if defined sHost (
for /f "usebackq eol=# tokens=1,2" %%i in ("%sHostFile%") do (
if /i "%%j" equ "%sHost%" (
set /a bFound = 1
set sAddress=%%i
)
)
if defined bFound (
echo.Host [%sHost%] ^(!sAddress!^) already present in [%sHostFile%]
) else (
echo.Add host [%sHost%] ^(127.0.0.1^) into [%sHostFile%]
echo.127.0.0.1 %sHost%>>"%sHostFile%"
)
) else (
echo.Usage: "%~nx0" ^<hostname^>
)
endlocal
GoTo:EOF

Если не ошибаюсь, автор iska

TakTo
09-03-2012, 17:45
Подскажите пожалуйста, как батником добавить строку 2м столбцом который будет размером с первый? Например:
03343532 000000
03343532 000000
03343532 000000
03343532 000000
...
000000 - добавленная

kamilgarey@vk
23-11-2013, 11:11
http://forum.oszone.net/showthread.php?p=2260325#post22603252. Вот батник с проверкой на наличие уже существующих записей и с разблокировкой доменов (в текстовике вместо адреса ставится дефис, т.е. например так: "- youtube.com"), но наткнулся на то, что ДОСовские команды при попытке хоть что-либо сделать с "hosts." выдают "Access is denied." »
Под админом запускали ?

joystick8000
28-02-2014, 16:04
sov44, А можно прокомментировать для тех не разбирается в батниках, например чтоб можно было сделать как внедрение записей так и их удаление.

sov44
28-02-2014, 20:47
joystick8000, готовый батник, который добавляет записи в hosts и создаёт рядом батник отката. Пробуйте.
@Echo Off
setlocal EnableDelayedExpansion

set sHostFile=%SystemRoot%\System32\drivers\etc\hosts

:: добавление записи в hosts
call :Install 1111.com
:: пишем скрипт отката записи в hosts
call :cl 1111.com

exit /b


:Install
set sHost=%~1

if defined sHost (
for /f "usebackq eol=# tokens=1,2" %%i in ("%sHostFile%") do (
if /i "%%j"=="%sHost%" Set flag=1
)
If not defined flag (echo.127.0.0.1 %sHost%>>"%sHostFile%")
)
goto :eof

:cl
(
echo @Echo Off
echo setlocal enabledelayedexpansion
echo.
echo set sHostFile=%%SystemRoot%%\System32\drivers\etc\hosts
echo set sHost=%~1
echo.
echo for /f "tokens=1* delims=]" %%%%a in ^('find /v /n "" ^^^<"%%sHostFile%%"'^) do ^(
echo echo.%%%%b ^| ^>nul find /i "%%sHost%%" ^|^| ^(echo.%%%%b^>^>"%%SystemRoot%%\System32\drivers\etc\temp_host"^)
echo ^)
echo del /f /q "%%sHostFile%%"
echo ren "%%SystemRoot%%\System32\drivers\etc\temp_host" "hosts"
echo exit /b
)>cl_hosts.cmd
goto :eof




© OSzone.net 2001-2012