使用批处理文件在两个文件之间切换

时间:2017-06-29 09:00:09

标签: batch-file

我有一个场景,我的C:\ Windows \文件夹中有一个名为file.ini的文件。

但我想创建一个批处理文件,将该文件保存到file_mr.ini,然后将其重命名为file.ini。

所以它看起来像这样,基本上是一个开关:

C:\Windows\
- file.ini

C:\Windows\
- file_mr.ini -> file.ini
(keeping the file_mr.ini and not removing it)

C:\Windows\
- file_original.ini -> file.ini
(keeping the file_original.ini and not removing it)

这就是我的尝试:

创建的文件:Enable mr.cmd>编辑:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=file_mr
SET new=file
for /f "tokens=*" %%f in ('C:\Windows\ /b *.ini') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

创建的文件:Disable mr.cmd>编辑:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=file_original
SET new=file
for /f "tokens=*" %%f in ('C:\Windows\ /b *.ini') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

但这很好(尚未测试)重命名文件并删除原始文件) - 这不是我想要的。

与您手动完成相同,方法是复制文件并重命名复制的文件。

2 个答案:

答案 0 :(得分:1)

您可以执行此操作以自动检测当前文件file.ini是否为file_mr.inifile_original.ini的副本并进行切换,因此您不需要两个批处理文件:

rem // Change to working directory:
pushd "C:\Windows"
rem // Compare current `file.ini` file with `file_original.ini`:
fc "file.ini" "file_original.ini" > nul 2>&1 && (
    rem // Files match, so exchange `file.ini` with copy of `file_mr.ini`:
    copy /Y "file_mr.ini" "file.ini" > nul
    echo Copied file `file_mr.ini`.
) || (
    rem // Files did not match or `file.ini` not found:
    copy /Y "file_original.ini" "file.ini" > nul
    echo Copied file `file_original.ini`.
)
popd

请注意,您需要对文件C:\Windows\file.ini的写权限。

答案 1 :(得分:0)

我查看了相关问题,并使用了这个答案:

Enable mr.cmd

copy /y C:\windows\file.ini C:\windows\file_original.ini
copy /y C:\windows\file_mr.ini C:\windows\file.ini

Disable mr.cmd

copy /y C:\windows\file.ini C:\windows\file_mr.ini
copy /y C:\windows\file_original.ini C:\windows\file.ini

更新:

经过更多调查后,现在按预期工作:

MR Enable.bat

find "C:\mr_folder\" C:\Windows\file.ini >nul && call
copy /y C:\Windows\file.ini C:\Windows\file_original.ini
copy /y C:\Windows\file_mr.ini C:\Windows\file.ini

MR Disable.bat

find "C:\mr_folder\" C:\Windows\file.ini >nul && call
copy /y C:\windows\file.ini C:\windows\file_mr.ini
copy /y C:\windows\file_original.ini C:\windows\file.ini