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

2024-11-19 04:34:09
推荐回答(2个)
回答(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



我的脚本可能不是最完美的,但应该算符合你的基本要求了!希望你喜欢,谢谢!

回答(2):

照葫芦画瓢吧