使用批处理文件进行条件重命名

时间:2015-10-30 17:04:17

标签: windows batch-file cmd batch-rename

我想使用批处理文件重命名计算机上特定目录中的两个文件。 问题是,如果可以使用标准批处理命令这样做,我可以有条件地重命名文件。更具体地说,我的例子如下:

我有两个"主持人"位于C:\ Windows \ System32 \ drivers \ etc中的文件;一个命名为" hosts",另一个命名为" hosts_X",a" hosts"包含我需要在特定情况下处于活动状态的特定指令的文件。

我想在这两个主持人和#34;之间切换。文件:有两种情况:案例" A"其中有一个"主持人"文件和" hosts_X"文件,案例" B"原来"主持人"文件重命名为" hosts_Y"和" hosts_X"被重命名为" hosts"。

是否可以使用单个批处理文件有条件地重命名这两个文件?比如,如果有一个名为" hosts"和一个名为" hosts_x"的文件,重命名" hosts" to" hosts_y"和" hosts_x"对于主持人,如果有一个名为" hosts"和一个名为" hosts_y"的文件,重命名" hosts" to" hosts_x"和" hosts_y"到"主持人"?

感谢您提供任何信息和帮助!

1 个答案:

答案 0 :(得分:1)

我总结了LiturgistAlex 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文件应在目录hosts_X中至少hosts_YC:\Windows\System32\drivers\etc处于活动状态。

参数应为XY

如果参数未指定现有主机文件,则会进行附加文件检查,从而导致出现错误消息。

如果在没有参数的情况下调用批处理文件,则还会输出消息。

根据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_Xhosts重命名为hosts_Yhosts_X重命名为hosts
  • 如果现有hosts_Yhosts将重命名为hosts_Xhosts_Y将重命名为hosts

目录中不应存在hostshosts_Xhosts_Y,因为这会导致文件重命名失败。但是同时存在的所有3个文件不应该是用于此任务的用例。 (使用move /Y代替ren,第二个文件名也有完整路径,这有助于避免使用用例。)

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • call /? ...有关%~1%~f0%*的解释。
  • copy /?
  • echo /?
  • if /?
  • ren /?
  • pause /?