文件覆盖前备份 批处理

@echo off
setlocal enabledelayedexpansion 
:: 如果for循环内定义变量,请添加此句

set workpath=C:\Users\%username%\Documents\FileReplaceRegion
::工作区路径

if not exist %workpath% (mkdir %workpath%)

set sourcepath=E:\feicaixian\Buffer\TSIS21_2018_10_26\TSIS21
::要被替换的文件所在目录 

set NewFolder=%workpath%\%date:~0,4%年%date:~5,2%月%date:~8,2%日%time:~0,2%点%time:~3,2%分%time:~6,2%秒_backup
::旧文件备份文件夹

mkdir %NewFolder%

dir /b %workpath%\FileToReplace > %workpath%\filename.txt
::获取要被替换的文件的文件名,存入新建txt文件

::备份旧文件
set /a fileNum=0 
for /f "delims=" %%i in (%workpath%\filename.txt) do (
::不加"delims="遇到空格则读完一行数据
set name="%sourcepath%\%%~i"
if exist !name! (
    move !name! %NewFolder%
    set /a fileNum+=1
) else (
    echo [不存在] !name! 
)
)

if %fileNum% equ 0 (rd %NewFolder% && echo 没有旧文件,不必备份) else (echo 备份成功!)

::写入新文件
for /f "delims=" %%a in ('dir /s/b %workpath%\FileToReplace\') do (
  move "%%a" %sourcepath%
)

::删除工作区空目录
for /f "delims=" %%a in ('dir /ad /s /b %workpath%\') do (
  rd "%%a">nul 2>nul
)
::利用rd不带参数只能删除空目录否则报错特性删除空目录。屏蔽报错信息,成功信息也屏蔽掉,默默地完成清理工作
::/b是为了得到简洁输出结果,否则获取到的行数据不是文件路径


pause

 

在文档下建立目录\FileReplaceRegion作为工作区,内建FileToReplace文件夹,放替换文件。在代码中指定目标目录sourcepath,即将要被替换的文件所在的目录。

将代码写入bat文件,运行。新文件移入目标目录前,旧文件会备份到工作区,完成文件覆盖前备份

posted @ 2019-04-11 21:42  谷谷非鼠  阅读(975)  评论(0编辑  收藏  举报