文件覆盖前备份 批处理
@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文件,运行。新文件移入目标目录前,旧文件会备份到工作区,完成文件覆盖前备份。