⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 文件备份器v2.3修改版2.cmd

📁 文件 源碼可以再編輯 打入你要備份文件路徑就可以備份了
💻 CMD
📖 第 1 页 / 共 5 页
字号:
echo     ║                                                                    ║
echo     ╚══════════════════════════════════╝
echo.
echo                                                      按任意键返回上一步...
pause>nul
goto input_source

:whether_over
cls
color 0c
title 文件备份器-路径已存在
echo.
echo.
echo.
echo.
echo.
echo ________________________________________________________________________________
echo.
echo          您输入的路径"%destination%"已经存在,覆盖还是追加?
echo.
echo ________________________________________________________________________________
echo.
echo     ╔══════════════════════════════════╗
echo     ║   按O覆盖,按A追加,按V查看保存目录,按 1 返回上一步,按 0 退出    ║
echo     ╚══════════════════════════════════╝
echo.
echo.
set choice=
set /p choice=                           请选择(O/A/V/0/1): 
if /i "%choice%"=="o" cls && goto over_write
if /i "%choice%"=="a" goto input_date
if /i "%choice%"=="v" call :view_directory && goto whether_over
if "%choice%"=="0" exit
if "%choice%"=="1" goto input_destination
goto whether_over

:whether_add
cls
color 0c
title 文件备份器-路径已存在
echo.
echo.
echo.
echo.
echo.
echo ________________________________________________________________________________
echo.
echo          "%destination%"下似乎已经存在以前的备份,覆盖还是追加?
echo.
echo ________________________________________________________________________________
echo.
echo    ╔═══════════════════════════════════╗
echo    ║  按 V 查看保存目录,按 O 覆盖,按 A 追加,按 1 返回上一步,按 0 退出 ║
echo    ╚═══════════════════════════════════╝
echo.
echo.
set choice=
set /p choice=                           请选择(V/O/A/0/1): 
if /i "%choice%"=="o" goto over_write
if /i "%choice%"=="a" cls && goto input_date
if /i "%choice%"=="v" call :view_directory && goto whether_add
if "%choice%"=="0" exit
if "%choice%"=="1" goto input_destination
goto whether_add

:freesize
::     假设字符串freesize长度范围为0~7(假设硬盘最大999G,换算成以M为单位则是7位数),
::  则首先在freesize前补足7个空格,然后直接取字符串的后7个字符,即可得到右对齐排列
::  的数字freesize。同理,假设字符串volume的长度范围为0~20(卷标名最长可达32位,但是
::  为了兼顾排版的显示,只取后20位)。
cls
color 2e
title 文件备份器-各分区剩余空间情况
setlocal EnableDelayedExpansion
echo.
echo.
echo        ╔══════════════════════════════╗
echo        ║        磁盘分区         磁盘卷标名      剩余空间(MB)       ║
echo        ║    _____________________________________________________   ║
for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  if exist %%d:\nul (
    for /f "tokens=3" %%z in ('dir /-c %%d:\') do set freesize=%%z
      if not "!freesize!"=="0" (
        set /a freesize=!freesize:~0,-3!/1049>nul
        set freesize=       !freesize!
        set freesize=!freesize:~-7!
        for /f "tokens=3*" %%v in ('vol %%d:') do set volume=%%w
        set volume=                    !volume!
        set volume=!volume:~-20!
        echo        ║           %%d: !volume!     !freesize!              ║
      )
    )
)
echo        ╚══════════════════════════════╝
echo.
echo.
echo.
echo.
echo                                                按任意键返回上一步...
pause>nul
goto input_destination

rem  ========创建备份任务脚本程序,要考虑到生成多个批处理文件的情况=============
:build_backup
call :list
title 文件备份器-正在生成备份程序...
if not exist "%ProgramFiles%\备份任务程序" md "%ProgramFiles%\备份任务程序"
set batch_directory=%ProgramFiles%\备份任务程序
attrib /s /d -r -h -s "%batch_directory%\*.*">nul 2>nul

:: 因为把所有的批处理内容只用一句 >"%batch_directory%\%name%_backup.bat" 来接收,
:: 所以其中的括号都要用 ^ 来转义

(
echo @echo off
echo mode con cols=35 lines=10
echo color 1f
echo title 文件备份器-%name%_backup
echo.
echo rem                        功能说明
echo.
echo rem        本程序由"文件备份器V2.3"生成  Code by JM  2006-10-19 QQ:13132002
echo.
echo rem                 build on %date% %time:~0,-3% by %username%
echo.
echo rem    原理:比较原始文件和备份文件修改日期的早晚,如果原始文件修改时间晚于备份文件,
echo rem          则复制原始文件覆盖备份文件;如果时间没差别,则不作任何处理。
echo.
echo if not exist "%source%" ^(
echo title 文件丢失
echo color 0c
echo echo.
echo echo ___________________________________
echo echo.
echo echo 文件"%source%"
echo echo.
echo ecoh 不存在,可能已被改名、移动或者删除
echo echo.
echo echo ___________________________________
echo ping 127.1 -n 5 ^>nul
echo exit^)
echo if not exist "%destination%" md "%destination%"
)>"%batch_directory%\%name%_backup.bat"

set xcopy_parameter=
if "%folder%"=="yes" (set xcopy_parameter=/e /s) else (goto file_backup)

(
echo attrib /s /d -s -h -r "%destination%\*.*"^>nul 2^>nul
echo set times=
echo setlocal enabledelayedexpansion
echo for /f "delims=" %%%%i in ^('xcopy /c /d /h /i /g /r %xcopy_parameter% /x /y "%source%" "%destination%"'^) do ^(
echo     if "%%%%i"=="复制了 0 个文件" ^(exit^) else ^(
echo         if not defined times call :head
echo         if ^^!file_time^^! lss %%%%~ti set file_time=%%%%~ti^&set file_route=%%%%~dpnxi
echo         if not "%%%%~ti"=="" ^(echo     %%%%~dpnxi    %%%%~ti^>^>"%destination%\%name_log%_log.log"
echo         ^) else ^(echo.^&echo                                                %%%%i^)^>^>"%destination%\%name_log%_log.log"
echo     ^)
echo     if "%%%%i"=="复制了 1 个文件" goto end
echo ^)

echo ^(
echo echo.
echo echo     最后更新的文件是:%%file_route%% ,更新操作发生在 %%file_time%% 。
echo ^)^>^>"%destination%\%name_log%_log.log"
echo :end
echo attrib /s /d +s +r "%destination%\*.*"^>nul 2^>nul
echo start "" "%destination%\%name_log%_log.log"
echo goto :eof
echo.
)>>"%batch_directory%\%name%_backup.bat"
call :build_head
goto build_revert

:file_backup
(
echo xcopy /c /d /h /i /g /q /x /y "%source%" "%destination%"^|findstr /b /e /c:"复制了 0 个文件"^>nul^&^&goto :eof
echo attrib -s -h -r "%destination%\*.*"^>nul 2^>nul
echo echo.^>^>"%destination%\%name_log%_log.log"
echo for /f "skip=1 tokens=1,2" %%%%i in ^('dir /a-d /tw "%source%"^^^|find "-"'^) do ^(
echo     echo ^^^<%%date:~0,10%% %%time:~0,8%% 备份记录^^^> 文件最后一次更新时间:%%%%i %%%%j^>^>"%destination%\%name_log%_log.log"
echo ^)
echo attrib +s +r "%destination%\*.*"^>nul 2^>nul
echo start "" "%destination%\%name_log%_log.log"
)>>"%batch_directory%\%name%_backup.bat"

rem  ========创建文件恢复脚本程序========
:build_revert
:: 恢复备份后文件(夹)的完整路径
for %%i in ("%source%") do set SourceFileName=%%~nxi
:: 判断%source%是文件还是文件夹
if "%folder%"=="yes" (set SourceFiles=%destination%) else (set SourceFiles=%destination%\%SourceFileName%)
(
echo @echo off
echo mode con lines=25
echo color 1f
echo title 文件备份器-%name%_revert
echo.
echo rem                        功能说明
echo.
echo rem        本程序由"文件备份器V2.3"生成  Code by JM  2006-10-19 QQ:13132002
echo.
echo rem                 build on %date% %time:~0,-3% by %username%
echo.
echo rem    原理:在创建备份任务时,把源文件的原始属性记录下来。当需要恢复文件时,
echo rem          则复制备份后的文件覆盖源文件,并去掉覆盖后所有文件的属性,最后
echo rem          从恢复程序中读出原始属性并重新设置。
echo if not exist "%destination%" ^(
echo title 文件丢失
echo color 0c
echo echo.
echo echo.
echo echo.
echo echo.
echo echo.
echo echo.
echo echo ________________________________________________________________________________
echo echo.
echo echo           文件"%destination%"不存在,可能已被改名、移动或者删除
echo echo.
echo echo ________________________________________________________________________________
echo ping 127.1 -n 5 ^>nul
echo exit^)
echo echo.
echo echo.
echo echo.
echo echo.
echo echo.
echo echo.
echo echo ________________________________________________________________________________
echo echo.
echo echo          正在把文件从"%destination%"恢复到"%source%",请稍侯...
echo echo.
echo echo ________________________________________________________________________________
)>"%batch_directory%\%name%_revert.bat"
if "%folder%"=="yes" echo if not exist "%source%" md "%source%">>"%batch_directory%\%name%_revert.bat"         
echo attrib /s /d -h -r -s "%source%"^> nul 2^>nul>>"%batch_directory%\%name%_revert.bat"

if "%folder%"=="yes" (goto folder_copy) else (goto file_copy)

:file_copy
for /f "tokens=*" %%i in ("%source%") do (set file_root=%%~dpi)
(
echo xcopy /c /h /q /r %xcopy_parameter% /x /y "%SourceFiles%" "%file_root%"^>nul 2^>nul
echo attrib -h -r -s "%source%"^>nul 2^>nul
)>>"%batch_directory%\%name%_revert.bat"
goto get_attrib

:folder_copy
(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -