Подводя итог полезным предложениям Liturgist и Alex K., ответьте на этот вопрос, чтобы удалить его из списка вопросов без ответа.
Пакетный файл в соответствии с идеей, представленной Liturgist:
@echo off
if not "%~1" == "" (
if exist "C:\Windows\System32\drivers\etc\hosts_%~1" (
copy /Y "C:\Windows\System32\drivers\etc\hosts_%~1" C:\Windows\System32\drivers\etc\hosts
) else (
echo %~f0 %*
echo.
echo Error: There is no file C:\Windows\System32\drivers\etc\hosts_%~1
echo.
pause
)
) else (
echo %~f0
echo.
echo Please call this batch file with either X or Y as parameter.
echo.
pause
)
Пакетный файл должен быть вызван с параметром, который определяет, какие хосты файл должен стать активным, по крайней мере, hosts_X
и hosts_Y
в каталоге C:\Windows\System32\drivers\etc
.
Параметр должен быть либо X
, либо Y
.
Дополнительная проверка файла производится в случае, если параметр не указывает существующий файл hosts, в результате чего появляется сообщение об ошибке.
Существует также сообщение, если командный файл вызывается без параметра.
Пакетный файл в соответствии с идеей, представленной Alex K.:
@echo off
if exist C:\Windows\System32\drivers\etc\hosts_X (
ren C:\Windows\System32\drivers\etc\hosts hosts_Y
ren C:\Windows\System32\drivers\etc\hosts_X hosts
echo hosts_X is now the active hosts file.
) else (
ren C:\Windows\System32\drivers\etc\hosts hosts_X
ren C:\Windows\System32\drivers\etc\hosts_Y hosts
echo hosts_Y is now the active hosts file.
)
echo.
pause
Этот пакетный файл переключает активный хостов файл в зависимости от того, какой файл шаблона хостов в настоящее время существует:
- С
hosts_X
существующих, hosts
переименовывается hosts_Y
и hosts_X
переименован в hosts
.
- В противном случае с
hosts_Y
существующим, hosts
переименован в hosts_X
, а hosts_Y
переименован в hosts
.
Там должно быть никогда hosts
, hosts_X
и hosts_Y
все существующие в то же время в каталоге, так как это приведет к неудачу файл переименовывается. Но все 3 файла, существующие в то же время, не должны использоваться для принятия решения для этой задачи.(Использование move /Y
вместо ren
с вторым именем файла, имеющими также полный путем поможет в этом не следует ожидать случая использования.)
Для понимания используемых команд и как они работают, откройте окно командной строки, выполните там следующие команды , и внимательно прочитайте все страницы справки, отображаемые для каждой команды очень тщательно.
call /?
... для объяснения %~1
, %~f0
и %*
.
copy /?
echo /?
if /?
ren /?
pause /?
Просто свяжитесь с [IF EXISTS] (http://stackoverflow.com/questions/4340350/how-to-check -if-a-file-exists-from-inside-a-batch-file), а затем переименовать? –
Как насчет создания host_x и host_y, а затем 'COPY/Y' того, который вы хотите в файле hosts? – lit
Спасибо! Они оба хорошие идеи. Я попробую их :) – Jonotespere