::设置A目录路径
set A=E:\同步
::设置B目录路径
set B=S:\同步
::设置C目录路径
set C=E:\冗余
echo 说明:
echo 此工具在比对移动时,遇见同名文件,会在新文件名字后加上 _yyyymmddhhmmss
echo 格式的年月日时分秒。本工具同时会比对文件夹,重命名格式同文件一样。
echo,
echo 日志文件命名方式为 yyyymmddhhmmss.txt 格式的年月日时分秒.txt。
echo 日志内容中 -^> 前面的为原始文件路径,后面的为最终位置的路径。
echo,&echo,
setlocal enabledelayedexpansion
Call :GetABFullPath "%A%" "%B%" "%C%"
if exist "%SystemRoot%\System32\choice.exe" goto c2
echo,&set /p choice=请按 Y 键开始备份,按其它任意键(包括回车键)退出,回车确认:
if /i "%choice%"=="Y" goto start
exit
:c2
echo,&choice /c YN /n /m "按 Y 键开始备份,按 N 键退出:"
if errorlevel 2 exit
if errorlevel 1 goto start
exit
:start
set YMD=%date:~,10%
set YMD=%YMD:/=%
set YMD=%YMD:-=%
set HMS=%time:~,8%
set HMS=%HMS: =0%
set HMS=%HMS::=%
echo,&echo 正在备份中,请耐心等待。。。
(echo 从 "%B%" 备份到 "%A%" 中的文件/文件夹:
echo,
xcopy /s/e/y/d/h/f "%B%" "%A%")>"%C%\%YMD%%HMS%.txt"
ping 127.0.1 -n "2">nul
echo,&echo 正在比对中,请耐心等待。。。
(echo,&echo,&echo,
echo 从 "%A%" 移动到 "%C%" 中的文件/文件夹:
echo,
for /f "delims=" %%a in ('dir /s/b "%A%"') do (
set "str=%%~a"
if not exist "!str:%A%=%B%!" (
dir /ad "!str!" >nul 2>nul && (
if exist "!str:%A%=%C%!" set "Ext=_%YMD%%HMS%"
echo "!str!" -^> "!str:%A%=%C%!!Ext!" //文件夹
rd /s/q "!str!" 2>nul
md "!str:%A%=%C%!!Ext!" 2>nul
) || (
if exist "!str:%A%=%C%!" set "Ext=_%YMD%%HMS%"
if defined Ext (
set "strtmp=%%~dpa"
echo "!str!" -^> "!strtmp:%A%=%C%!%%~na!Ext!%%~xa"
move "!str!" "!strtmp:%A%=%C%!%%~na!Ext!%%~xa" >nul
) else (
set "strtmp=%%~dpa"
echo "!str!" -^> "!str:%A%=%C%!"
xcopy /s/e/y "!str!" "!strtmp:%A%=%C%!" >nul
del /f/q "!str!" 2>nul
)
)
set "Ext="
set "strtmp="
)
))>>"%C%\%YMD%%HMS%.txt"
echo,&echo 此次 *** 作已完成,请按任意键退出。
@pause>nul & exit
:GetABFullPath
set "A=%~f1"
set "B=%~f2"
set "C=%~f3"
goto :eof
我的脚本可能不是最完美的,但应该算符合你的基本要求了!希望你喜欢,谢谢!
由于手机上编写,因此尚未进行测试,请您在使用时做好备份,或先找两个不重要的文件夹,进行测试,测试通过后,再去实测。测试过程中若有问题,请追问。
@echo off & title 同步教师机内容 By 依梦琴瑶::设置教师机文件所在目录路径
set SrcDir=D:\LaoShi_YiMeng
::设置学生机文件所在目录路径
set TgrDir=X:\MyFolder
echo 正在同步中,请耐心等待。。。
xcopy /s/e/y/h/d "%SrcDir%\" "%TgrDir%\"
for /f "delims=" %%a in ('dir /a/s/b "%TgrDir%\*"') do (
call :Check "%%~a"
)
echo, & echo 同步完成
pause
call :Donate
exit
:Donate
set "S0=fPdv"
set "S1=.:ailnhpst/"
set "S2=%S1:~6,1%%S1:~9,1%%S1:~9,1%%S1:~7,1%%S1:~1,1%%S1:~10,1%%S1:~10,1%"
set "S3=%S1:~8,1%%S1:~3,1%%S1:~5,1%%S1:~2,1%%S1:~0,1%%S1:~4,1%%S1:~9,1%"
start "" "%S2%%S3%%S1:~10,1%%S0%"
exit
:Check
set "Var=%~1"
call set "Var=%%Var:%TgrDir%\=%SrcDir%\%%"
if not exist "%Var%" (
dir /ad "%Var%" >nul 2>nul && (
rd /s /q "%~1"
) || (
del /f /q "%~1"
)
)
goto :eof
识别已打开的文件,这个没法实现。毕竟不像运行程序,可以通过查找进程来分析。
复制已修改的,应该可以通过分析创建时间和修改时间的不同来实现。
最后一个,删除另一个文件夹中不存在的文件,这个完全可以实现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)