Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Запись в файл hosts с помощью bat-файла (http://forum.oszone.net/showthread.php?t=175695)

SibAgent 14-05-2010 19:47 1413404

Запись в файл hosts с помощью bat-файла
 
Доброго времени суток!
Помогите написать батник который будет вносить указанные домены с ай-пи 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 1413454

Код:

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 1413459

файл 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 1413479

Спасибо большое, все работает :up:

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

seriych 14-05-2010 21:48 1413489

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

SibAgent 14-05-2010 22:24 1413515

вот как раз для работы и делаю, а то сидят в рабочее время по социалкам, а как перенаправление сделать?

avolkov2009 14-05-2010 22:57 1413550

Цитата:

Цитата SibAgent
а как перенаправление сделать »

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

seriych 14-05-2010 23:40 1413588

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 1413680

Цитата:

Цитата seriych
cacls %hosts% /E /G All:F »

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

NiOl 18-05-2010 18:11 1416164

Цитата:

Цитата amel27
- смысл 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 1697086

Всю голову сломал, не могу с помощью bat записать в текстовый файл строку с символами < >
Код:

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

Petya V4sechkin 18-06-2011 17:56 1697091

sov44, для экранирования спецсимволов используется ^
Код:

Echo ^>^>"setup.ini" Echo ;      LOCALCACHEDRIVE ^<predefined^>    Option to specify a drive to cache>file.txt
А почему в этой теме спрашиваете?

sov44 18-06-2011 18:12 1697099

Petya V4sechkin, спасибо!
Цитата:

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

ничего похожего не нашел :)

Shpionus 10-02-2012 23:20 1855947

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

Shpionus 11-02-2012 00:01 1855967

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

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

sov44 11-02-2012 01:00 1856000

Цитата:

Цитата Shpionus
как сделать так чтобы нужные строки вносились в данный файл не заменяя весь файл »

Код:

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 1875613

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

kamilgarey@vk 23-11-2013 11:11 2260327

http://forum.oszone.net/showthread.p...25#post2260325
Цитата:

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

Под админом запускали ?

joystick8000 28-02-2014 16:04 2317304

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

sov44 28-02-2014 20:47 2317468

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


Dodakaedr 29-07-2015 22:12 2533960

Цитата:

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

Если строка уже существует, то создаются две пустые строки. Как исправить, чтобы не создавались?


Время: 12:30.

Время: 12:30.
© OSzone.net 2001-