Показать полную графическую версию : Добавление и удаление записей в host файл с помощью bat
Доброго времени суток.
Помогите написать bat файл который будет вносить в host определенную запись в зависимости от ответа, всего 3 варианта выбора, при выборе одного из вариантов сначала проверяется host файл на наличие других трех записей, в случае обнаружение стирает их, а затем вносит выбранную.
Помогите написать bat файл »
... хотите вступить, хорошо, а что у вас есть ?!(ц)BэHоCэ
то что ты хочешь - тянет на целую программу на ЯВУ, КМК. и 100пудово, такая уже есть.
допустим в файле запись:
заяц
стоп
сигнал
нам предлагается отвлеченный выбор чего-то (выберите из цифр: 1 2 3) или выбор из этих же строк, заданных в переменных?
при выборе одного из вариантов должен пройти цикл перебора на совпадение всех заданных переменных со строками файла или при любом совпадении выбора с первого раза удалять содержимое? Или вообще не важно, выбрали 1 - есть любая запись, удалить все, записать свое?
я могу еще несколько вариантов развития событий накреативить, пролейте свет!
Фильтр по %host% (http://forum.oszone.net/forumdisplay.php?f=102&filter_string=%25host%25&filter_by=title).
нам предлагается отвлеченный выбор чего-то (выберите из цифр: 1 2 3) или выбор из этих же строк, заданных в переменных? »
После запуска батника должно появиться сообщение, мол, если вам нужен такой то хост введите 1, если другой 2, или же 3...
при выборе одного из вариантов должен пройти цикл перебора на совпадение всех заданных переменных со строками файла или при любом совпадении выбора с первого раза удалять содержимое? Или вообще не важно, выбрали 1 - есть любая запись, удалить все, записать свое? »
Должен пройти цикл перебора, при обнаружении искомых записей (не обязательно те которые указаны в переменных 1,2,3, т. е. любые которые внесены в список для поиска) скрипт удалит только те которые обнаружил.
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
потому как задачу я пока ... не понял ну ни грамма.
потому как задачу я пока ... не понял ну ни грамма. »
Вот что я слепил из того что нашел в гугле, код требуемую функцию выполняет, но хотелось бы чтобы удаление указанных записей шло по принципу редактирования файла, а не замены его. Ещё размер окна нормальный сделать.
@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
по принципу редактирования файла »
начинает доходить вроде
батники не умеют работать с окнами, можно в коде дать комаду открыть: explorer "файл" и вручную редактировать и сохранять.
батники не умеют работать с окнами, можно в коде дать комаду открыть: 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%. »
Не подскажете в чем может быть проблема?
Не подскажете в чем может быть проблема? »
Не подскажу. Не интересно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.