主要功能
假设有两个目录,A目录和B目录。要A目录整体复制到B目录,同名文件则覆盖。
此脚本会备份同名文件包括完整的路径。同时会记录A目录的所有文件。
可以快捷还原B目录到覆盖之前,同时还会将A目录比原本B目录多的文件删除。
主要程序
脚本是bat
脚本
@echo off
setlocal enabledelayedexpansion
chcp 65001 > nul
echo 1:部署程序
echo 2:还原备份程序
echo 3:查看使用说明
set /p "mode=请选择执行操作:"
if /i "!mode!"=="1" (
goto deploy
)else if /i "!mode!"=="2" (
goto reduction
)else (
goto explain
)
:deploy
echo --------------------------
echo --------------------------
set /p "sourceDir=请输入源目录:"
set /p "targetDir=请输入目标目录(被覆盖目录):"
set /p "backupDir=请输入备份目录:"
if not exist "%backupDir%" mkdir "%backupDir%"
set "scriptDir=%~dp0"
if not exist ".\!targetDir!" (
echo !targetDir! >> "!backupDir!\backupChecklist.txt"
) else (
echo !scriptDir!!targetDir! >> "!backupDir!\backupChecklist.txt"
)
for /r "%sourceDir%" %%i in (*) do (
set "sourcePath=%%i"
set "realDestPath=!sourcePath:%sourceDir%=%targetDir%!"
for %%i in ("!realDestPath!") do (set "destPath=%%~pi")
set "backupPath=!sourcePath:%sourceDir%=%backupDir%!"
for %%i in ("!backupPath!") do (set "backupPath=%%~pi")
echo !realDestPath! >> "!backupDir!\backupChecklist.txt"
if not exist "!realDestPath!" (
xcopy "%%i" "!destPath!" /s /y /f > nul
) else (
xcopy "!realDestPath!" "!backupPath!" /s /y /f > nul
del /q "!realDestPath!"
xcopy "%%i" "!destPath!" /s /y /f > nul
)
)
goto end
:reduction
echo --------------------------
echo --------------------------
set /p "backupDir=请输入备份文件目录:"
if not exist "!backupDir!\backupChecklist.txt" (
echo "找不到文件:!backupDir!\backupChecklist.txt"
goto end
)
set isFirstLine=1
for /F "tokens=*" %%A in (!backupDir!\backupChecklist.txt) do (
if defined isFirstLine (
set "targetPrefix=%%A"
set "isFirstLine="
)else (
del /q "%%A" 2> nul
)
)
xcopy "!backupDir!" "!targetPrefix!" /s /y /f
del /q "!targetPrefix:~0,-1!\backupChecklist.txt"
goto end
:explain
echo --------------------------
echo --------------------------
echo 会对比源目录和目标目录的文件,若有同名文件,会备份目标目录的文件到备份目录中
echo 会将源目录的所有文件绝对路径记录在备份目录下的backupChecklist.txt
echo 还原程序会备份目录的文件替换目标目录文件,同时会删除之前源目录存在目标目录不存的文件
echo 若存在同名父子目录,输入相对路径程序可能会出错,建议输入目录的绝对路径
echo --------------------------
echo --------------------------
goto end
:end
echo ...
echo ...
echo 已完成
附上脚本的几张截图