Почему этот скрипт не может заменить файл hosts? - PullRequest
0 голосов
/ 13 февраля 2020

Мы хотим внести изменения в файл hosts на нашем мобильном телефоне P C, который мы добавляем на наши сайты. Однако клиент не так хорошо разбирается в компьютерах, поэтому я хотел создать пакетный файл, чтобы выполнить обновление для них.

Идея состоит в том, чтобы -Создать копию оригинала с датой, когда он был скопировано. -Обновление файла hosts.

Из-за работы с win 10 и 7 мы выяснили, что иногда мы не можем напрямую обновить файл hosts, не скопировав его сначала, а затем переопределить оригинал. Поэтому процедура, которая, как я думал, будет работать, такова.

  1. Копия оригинала с датой его копирования.
  2. Копирование хостов на рабочий стол.
  3. Обновление Файл hosts на рабочем столе.
  4. переопределяет исходный файл hosts.
  5. сообщение в случае успеха или неудачи.

Вы можете видеть, что программа выглядит не так сложно, но я столкнулся с ошибкой из-за ошибки привилегий. Поэтому из-за того, что у наших клиентов не было достаточных знаний, я хотел попытаться поднять их, хотя мой пакетный файл.

Я связал поиск здесь и нашел сообщение " Как я могу автоматически поднять свою партию файл, чтобы он запрашивал у UA C права администратора, если требуется?". Но, к сожалению, мои знания VBS и пакета не настолько высоки, и я надеялся, что кто-то может помочь мне расшифровать его.

Код, который я создал:

::the copy to desktop command                                                                         xcopy /s C:\Windows\System32\drivers\etc\hosts %userprofile%\desktop

::the update of hosts file                                                                            
echo www.qpv-view.info xxx.xxx.xxx.xxx >hosts

::the date for the copied hosts file                                                               
@echo off                                                                                              
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a                       
set YYYY=%dt:~0,4%                                                                                     
set MM=%dt:~4,2%                                                                                       
set DD=%dt:~6,2%                                                                                       set stamp=Oldhosts_%YYYY%%MM%%DD%                                                                     
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\%stamp%                                          

::The override of the updated file                                                                    
move /s/Y %userprofile%\desktop\hosts C:\Windows\System32\drivers\etc

end

Когда я запускаю, копия работает отлично. Однако часть обновления требует повышенных привилегий. Однако, если я запускаю скрипт с повышенными привилегиями, копирование не происходит.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Кажется, что вы не можете скопировать в %userprofile%\desktop при использовании повышенных привилегий!

Так что я просто скопировал файл в папку drivers и все работало нормально.

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set stamp=Oldhosts_%YYYY%%MM%%DD%

copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\%stamp%
copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers

echo www.qpv-view.info 172.16.10.60 >C:\Windows\System32\drivers\hosts

move /y C:\Windows\System32\drivers\hosts C:\Windows\System32\drivers\etc

pause
0 голосов
/ 13 февраля 2020

Поскольку stamp не определен, эта строка будет копировать файл hosts поверх самого себя:

copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\%stamp%

Поскольку он эквивалентен:

copy /y C:\Windows\System32\drivers\etc\hosts C:\Windows\System32\drivers\etc\
...