我想使用批处理文件重命名计算机上特定目录中的两个文件。 问题是,如果可以使用标准批处理命令这样做,我可以有条件地重命名文件。更具体地说,我的例子如下:
我有两个"主持人"位于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"到"主持人"?
感谢您提供任何信息和帮助!
答案 0 :(得分: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文件应在目录hosts_X
中至少hosts_Y
和C:\Windows\System32\drivers\etc
处于活动状态。
参数应为X
或Y
。
如果参数未指定现有主机文件,则会进行附加文件检查,从而导致出现错误消息。
如果在没有参数的情况下调用批处理文件,则还会输出消息。
根据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 /?