Добавление и удаление записей в host файл с помощью bat
Доброго времени суток.
Помогите написать bat файл который будет вносить в host определенную запись в зависимости от ответа, всего 3 варианта выбора, при выборе одного из вариантов сначала проверяется host файл на наличие других трех записей, в случае обнаружение стирает их, а затем вносит выбранную.
|
Цитата:
Цитата xolod04
Помогите написать bat файл »
|
... хотите вступить, хорошо, а что у вас есть ?!(ц)BэHоCэ
то что ты хочешь - тянет на целую программу на ЯВУ, КМК. и 100пудово, такая уже есть.
|
допустим в файле запись:
заяц
стоп
сигнал
нам предлагается отвлеченный выбор чего-то (выберите из цифр: 1 2 3) или выбор из этих же строк, заданных в переменных?
при выборе одного из вариантов должен пройти цикл перебора на совпадение всех заданных переменных со строками файла или при любом совпадении выбора с первого раза удалять содержимое? Или вообще не важно, выбрали 1 - есть любая запись, удалить все, записать свое?
я могу еще несколько вариантов развития событий накреативить, пролейте свет!
|
Цитата:
Цитата alpap
нам предлагается отвлеченный выбор чего-то (выберите из цифр: 1 2 3) или выбор из этих же строк, заданных в переменных? »
|
После запуска батника должно появиться сообщение, мол, если вам нужен такой то хост введите 1, если другой 2, или же 3...
Цитата:
Цитата alpap
при выборе одного из вариантов должен пройти цикл перебора на совпадение всех заданных переменных со строками файла или при любом совпадении выбора с первого раза удалять содержимое? Или вообще не важно, выбрали 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
потому как задачу я пока ... не понял ну ни грамма.
|
Цитата:
Цитата alpap
потому как задачу я пока ... не понял ну ни грамма. »
|
Вот что я слепил из того что нашел в гугле, код требуемую функцию выполняет, но хотелось бы чтобы удаление указанных записей шло по принципу редактирования файла, а не замены его. Ещё размер окна нормальный сделать.
Код:
@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
|
Цитата:
Цитата xolod04
по принципу редактирования файла »
|
начинает доходить вроде
батники не умеют работать с окнами, можно в коде дать комаду открыть: explorer "файл" и вручную редактировать и сохранять.
|
Цитата:
Цитата alpap
батники не умеют работать с окнами, можно в коде дать комаду открыть: 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%
Теперь при повторном запуске батника скрипт не может убрать записи из за атрибута файла.
Не подскажете в чем может быть проблема?
|
Цитата:
Цитата xolod04
Не подскажете в чем может быть проблема? »
|
Не подскажу. Не интересно.
|
Время: 14:24.
© OSzone.net 2001-