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

Conditional renaming with batch file

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

我有两个 "hosts" 文件位于 C:\Windows\System32\drivers\etc;一个名为 "hosts",另一个名为 "hosts_X",一个 "hosts" 文件,其中包含我需要在特定情况下激活的特定说明。

我想在这两个 "hosts" 文件之间切换:有两种情况:情况 "A" 其中有一个 "hosts" 文件和一个 "hosts_X" 文件, case "B" 其中原始 "hosts" 文件重命名为 "hosts_Y" 并且 "hosts_X" 重命名为 "hosts".

是否可以有一个批处理文件有条件地重命名这两个文件?比如,如果有一个名为 "hosts" 的文件和一个名为 "hosts_x" 的文件,请将 "hosts" 重命名为 "hosts_y" 并将 "hosts_x" 重命名为主机,如果有一个名为 "hosts" 和一个名为 "hosts_y" 的文件,将 "hosts" 重命名为 "hosts_x" 并将 "hosts_y" 重命名为 "hosts"?

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

我总结了 Liturgist and 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
)

必须使用一个参数调用批处理文件,该参数指定目录 C:\Windows\System32\drivers\etc.

中哪个主机文件应至少激活 hosts_Xhosts_Y

参数应为 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_X 存在的情况下,hosts 重命名为 hosts_Yhosts_X 重命名为 hosts
  • 否则 hosts_Y 已存在,hosts 重命名为 hosts_Xhosts_Y 重命名为 hosts

绝不应在目录中同时存在 hostshosts_Xhosts_Y,因为这会导致文件重命名失败。但是同时存在的所有 3 个文件不应该是考虑此任务的用例。 (使用 move /Y 而不是 ren 并且第二个文件名也具有完整路径将有助于这种不期望用例。)

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

  • call /? ... 用于解释 %~1%~f0%*
  • copy /?
  • echo /?
  • if /?
  • ren /?
  • pause /?