Войти

Показать полную графическую версию : Добавление и удаление записей в host файл с помощью bat


xolod04
06-03-2017, 22:22
Доброго времени суток.
Помогите написать bat файл который будет вносить в host определенную запись в зависимости от ответа, всего 3 варианта выбора, при выборе одного из вариантов сначала проверяется host файл на наличие других трех записей, в случае обнаружение стирает их, а затем вносит выбранную.

x0r
07-03-2017, 02:21
Помогите написать bat файл »
... хотите вступить, хорошо, а что у вас есть ?!(ц)BэHоCэ
то что ты хочешь - тянет на целую программу на ЯВУ, КМК. и 100пудово, такая уже есть.

alpap
07-03-2017, 02:34
допустим в файле запись:

заяц
стоп
сигнал

нам предлагается отвлеченный выбор чего-то (выберите из цифр: 1 2 3) или выбор из этих же строк, заданных в переменных?
при выборе одного из вариантов должен пройти цикл перебора на совпадение всех заданных переменных со строками файла или при любом совпадении выбора с первого раза удалять содержимое? Или вообще не важно, выбрали 1 - есть любая запись, удалить все, записать свое?
я могу еще несколько вариантов развития событий накреативить, пролейте свет!

Iska
07-03-2017, 03:14
Фильтр по %host% (http://forum.oszone.net/forumdisplay.php?f=102&filter_string=%25host%25&filter_by=title).

xolod04
07-03-2017, 11:03
нам предлагается отвлеченный выбор чего-то (выберите из цифр: 1 2 3) или выбор из этих же строк, заданных в переменных? »
После запуска батника должно появиться сообщение, мол, если вам нужен такой то хост введите 1, если другой 2, или же 3...
при выборе одного из вариантов должен пройти цикл перебора на совпадение всех заданных переменных со строками файла или при любом совпадении выбора с первого раза удалять содержимое? Или вообще не важно, выбрали 1 - есть любая запись, удалить все, записать свое? »
Должен пройти цикл перебора, при обнаружении искомых записей (не обязательно те которые указаны в переменных 1,2,3, т. е. любые которые внесены в список для поиска) скрипт удалит только те которые обнаружил.

alpap
08-03-2017, 02:56
xolod04,
начнем с этого:

@echo off
echo Eсли вам нужен такой то хост введите 1
echo Eсли вам нужен не такой то хост введите 2
echo Eсли вам нужен какой-то не такой хост введите 3
set /p v=
if %v%==1 call :x1
if %v%==2 call :x2
if %v%==3 call :x3
pause& exit

:x1
:: командой echo:>"hosts1.txt" очищаем файл (удаляем все из него)
<"hosts1.txt" find /i "Заяц" && (echo Есть такая информация& echo:>"hosts1.txt")
exit /b

:x2
<"hosts2.txt" find /i "Заяц" && (echo Есть такая информация)
exit /b

:x3
<"hosts3.txt" find /i "Заяц" && (echo Есть такая информация)
exit /b

потому как задачу я пока ... не понял ну ни грамма.

xolod04
08-03-2017, 05:35
потому как задачу я пока ... не понял ну ни грамма. »
Вот что я слепил из того что нашел в гугле, код требуемую функцию выполняет, но хотелось бы чтобы удаление указанных записей шло по принципу редактирования файла, а не замены его. Ещё размер окна нормальный сделать.
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
Chcp 866 >nul
title text title
cd /d "%~dp0"
:begin
set host_file=%WINDIR%\system32\drivers\etc\hosts
set $host_file=hosts
:: Хосты, которые нужно удалить. Количество пробелов имеет значение.
set "url_name=127.0.0.1 test1"
set "url_name2=127.0.0.1 test2"
set "url_name3=127.0.0.1 test3"
echo Добавить запись domain.ru - 1
echo Добавить запись domain.com - 2
echo Добавить запись domain.me - 3
echo ______________________________
set /p ch=Веедите 1, 2 или 3:
if "%ch%"=="1" (Call :m1& goto :ext)
if "%ch%"=="2" (Call :m2& goto :ext)
if "%ch%"=="3" (Call :m3& goto :ext)
echo Неправильный ввод
goto :begin
:ext
pause
goto :eof
:m1
for /f "tokens=1* delims=]" %%A in ('find /v /n "" ^<"%host_file%"') do (
set "line=%%B"
if "!line!" neq "%url_name%" if "!line!" neq "%url_name2%" if "!line!" neq "%url_name3%" >>%$host_file% echo.!line!
)
del /q %host_file%
move "%$host_file%" "%host_file%"
attrib -R -S -H -A %host_file%
echo 192.168.10.101 domain.ru >> %WINDIR%\system32\drivers\etc\hosts
echo Добавлена запись domain.ru
exit /B
:m2
for /f "tokens=1* delims=]" %%A in ('find /v /n "" ^<"%host_file%"') do (
set "line=%%B"
if "!line!" neq "%url_name%" if "!line!" neq "%url_name2%" >>%$host_file% echo.!line!
)
del /q %host_file%
move "%$host_file%" "%host_file%"
attrib -R -S -H -A %host_file%
echo 192.168.10.102 domain.com >> %WINDIR%\system32\drivers\etc\hosts
echo Добавлена запись domain.com
exit /B
:m3
for /f "tokens=1* delims=]" %%A in ('find /v /n "" ^<"%host_file%"') do (
set "line=%%B"
if "!line!" neq "%url_name%" if "!line!" neq "%url_name2%" >>%$host_file% echo.!line!
)
del /q %host_file%
move "%$host_file%" "%host_file%"
attrib -R -S -H -A %host_file%
echo 192.168.10.103 domain.me >> %WINDIR%\system32\drivers\etc\hosts
echo Добавлена запись domain.me
exit /B

alpap
08-03-2017, 15:54
по принципу редактирования файла »
начинает доходить вроде

батники не умеют работать с окнами, можно в коде дать комаду открыть: explorer "файл" и вручную редактировать и сохранять.

xolod04
08-03-2017, 17:57
батники не умеют работать с окнами, можно в коде дать комаду открыть: explorer "файл" и вручную редактировать и сохранять. »
Ещё нашел косяк в коде который не удается исправить, при выборе одного из 3-х вариантов проверяется хост файл на наличие других записей которые необходимо удалить таким образом:
set host_file=%WINDIR%\system32\drivers\etc\hosts
set $host_file=hosts
set "url_name=127.0.0.1 test1"
set "url_name2=127.0.0.1 test2"
set "url_name3=127.0.0.1 test3"
for /f "tokens=1* delims=]" %%A in ('find /v /n "" ^<"%host_file%"') do (
set "line=%%B"
if "!line!" neq "%url_name%" if "!line!" neq "%url_name2%" if "!line!" neq "%url_name3%" >>%$host_file% echo.!line!
)
del /q %host_file%
move "%$host_file%" "%host_file%"
attrib -R -S -H -A %host_file%
После его отработки на hosts файле появляется атрибут "архивный", несмотря на то, что в коде присутствует команда снимающая его:
attrib -R -S -H -A %host_file%
Теперь при повторном запуске батника скрипт не может убрать записи из за атрибута файла.

Фильтр по %host%. »
Не подскажете в чем может быть проблема?

Iska
08-03-2017, 19:17
Не подскажете в чем может быть проблема? »
Не подскажу. Не интересно.




© OSzone.net 2001-2012