2015-10-30 2 views
1

Я бы хотел переименовать два файла в определенном каталоге на моем компьютере с помощью командного файла. Проблема в том, что мне хотелось бы, если это возможно со стандартными командами партии, для условного переименования файлов. Чтобы быть более конкретным, мой пример выглядит следующим образом:Условное переименование с помощью командного файла

У меня есть два файла «hosts», расположенные в каталоге C: \ Windows \ System32 \ drivers \ etc; один из них называется «хосты», другой - «hosts_X», файл «hosts», содержащий конкретные инструкции, которые должны быть активны в конкретном случае.

Я хотел бы переключиться между этими двумя файлами «hosts»: есть два случая: случай «A», в котором есть файл «hosts» и файл «hosts_X», случай «B», в котором оригинал Файл «hosts» переименовывается в «hosts_Y», а «hosts_X» переименовывается в «hosts».

Возможно ли иметь один пакетный файл, который условно переименовывает эти два файла? Например, если есть файл с именем «hosts» и файл с именем «hosts_x», переименуйте «hosts» на «hosts_y» и «hosts_x» на хосты, и если есть файл с именем «hosts» и файл с именем «hosts_y», переименовать «хосты» в «hosts_x» и «hosts_y» на «hosts»?

Благодарим за информацию и помощь!

+4

Просто свяжитесь с [IF EXISTS] (http://stackoverflow.com/questions/4340350/how-to-check -if-a-file-exists-from-inside-a-batch-file), а затем переименовать? –

+0

Как насчет создания host_x и host_y, а затем 'COPY/Y' того, который вы хотите в файле hosts? – lit

+0

Спасибо! Они оба хорошие идеи. Я попробую их :) – Jonotespere

ответ

1

Подводя итог полезным предложениям 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 /?
+1

Спасибо, Mofi, за ваше идеальное резюме и ваши усилия. Я выбрал второй, и он отлично работает! Благодаря Алексу К. и литургизму – Jonotespere