Windows 客户端定时增量备份文件夹到远程服务器详细教程

350 阅读7分钟

Windows 客户端定时增量备份文件夹到远程服务器详细教程

一、背景说明

在实际的业务场景里,常常会遇到需要将多个客户端的特定文件夹数据汇总到同一台服务器进行批量解析处理的情况。本方案将利用 Windows 系统自带的功能来实现这一需求,具体借助 xcopy 命令完成文件夹的拷贝,使用任务计划程序达成自动定时拷贝,通过 Windows 的文件夹共享功能实现跨主机的远程拷贝。

二、环境准备

服务器端

服务器已完成共享文件夹的配置,共享文件夹目录为 \\192.168.1.100\Share。需要保证该共享文件夹具备合适的权限设置,允许客户端进行读写操作。

客户端

以客户端电脑 IP 为 192.168.1.101 为例,要确保客户端与服务器处于同一局域网环境,并且客户端能够正常访问服务器的共享文件夹。

三、配置步骤

(一)编写客户端备份脚本 C:\xcopy\xcopy.bat

该脚本主要用于建立与远程服务器共享文件夹的连接,并将本地指定文件夹的内容拷贝到远程服务器。

pushd C:\Users\wang
net use \\192.168.1.100\Share "password" /user:"username"
XCOPY /e /h /I /d /r "C:\to_back_dir" "\\192.168.1.100\Share\back_dir\192.168.1.101" /y
exit
代码解释
  1. pushd C:\Users\wang

    • pushd 命令用于切换当前工作目录到指定路径,同时会将之前的工作目录保存起来。这里的 C:\Users\wang 中的 wang 需根据实际情况修改为当前客户端登录用户的用户名。
  2. net use \\192.168.1.100\Share "password" /user:"username"

    • net use 命令用于建立与远程共享资源的连接。\\192.168.1.100\Share 是远程服务器的共享文件夹路径;"password" 要替换为访问该共享文件夹所需的实际密码;/user:"username" 中的 username 需替换成用于访问共享文件夹的实际用户名。
  3. XCOPY /e /h /I /d /r "C:\to_back_dir" "\\192.168.1.100\Share\back_dir\192.168.1.101" /y

    • XCOPY 是 Windows 系统中用于文件和文件夹复制的命令,各参数含义如下:
      • /e:递归复制目录及其子目录,包括空目录。也就是说,会将 C:\to_back_dir 下的所有内容(不管目录是否为空)都复制到远程目标位置。
      • /h:复制具有隐藏或系统属性的文件。默认情况下,XCOPY 不会复制这类特殊属性的文件,使用该参数可以将它们也一并复制。
      • /I:若目标位置不存在且要复制多个文件,默认将目标视为目录。这样在目标文件夹不存在时,会自动创建该文件夹。
      • /d:仅复制源文件比目标文件新,或者目标文件不存在的文件。这实现了增量拷贝的功能,即后续执行时只复制有变化的文件。
      • /r:覆盖只读文件。如果目标位置存在只读文件,使用该参数可以强制覆盖这些文件。
      • /y:禁止提示确认要覆盖现存目标文件。在复制过程中遇到同名文件时,会直接覆盖而不会弹出确认提示框。
      • "C:\to_back_dir" 是本地需要备份的文件夹路径,可根据实际情况修改。
      • "\\192.168.1.100\Share\back_dir\192.168.1.101" 是远程服务器共享文件夹下的目标路径,使用客户端的 IP 作为子目录名,方便区分不同客户端的备份数据。
  4. exit 脚本执行完毕后退出。

(二)编写任务计划程序导入的位置文件 C:\xcopy\etc\文件夹定时同步.xml

此 XML 文件用于定义定时任务的详细配置,一般情况下不需要修改,不过你可以根据具体需求对部分参数进行调整。

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2025-02-18T11:33:28.5858923</Date>
    <Author>DESKTOP-EDOOSII\zhiyin</Author>
    <URI>\文件夹定时同步</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <Repetition>
        <Interval>PT1M</Interval>
        <Duration>P1D</Duration>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2025-02-18T00:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-321127399-1749695520-532279331-1001</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>false</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\xcopy\xcopy.bat</Command>
      <WorkingDirectory>C:\xcopy\</WorkingDirectory>
    </Exec>
  </Actions>
</Task>
配置解释
  1. <RegistrationInfo> 部分

    • <Date>:记录任务的注册日期和时间。
    • <Author>:指定任务的创建者。
    • <URI>:任务的唯一标识符。
  2. <Triggers> 部分

    • <CalendarTrigger>:表示按日历时间触发任务。
      • <Repetition>:定义任务的重复执行规则。
        • <Interval>PT1M</Interval>:任务每隔 1 分钟重复执行一次。
        • <Duration>P1D</Duration>:重复执行的持续时间为 1 天。
        • <StopAtDurationEnd>false</StopAtDurationEnd>:持续时间结束后不停止任务。
      • <StartBoundary>2025-02-18T00:00:00</StartBoundary>:任务的开始时间。
      • <Enabled>true</Enabled>:启用该触发器。
      • <ScheduleByDay>:按天进行日程安排。
        • <DaysInterval>1</DaysInterval>:每天执行一次。
  3. <Principals> 部分

    • <Principal>:定义任务的执行主体。
      • <UserId>:指定执行任务的用户 ID。
      • <LogonType>Password</LogonType>:登录类型为使用密码登录。
      • <RunLevel>HighestAvailable</RunLevel>:以最高可用权限运行任务。
  4. <Settings> 部分

    • 包含了任务执行的各种设置,如多实例策略、电池使用策略、网络可用性策略等。
  5. <Actions> 部分

    • <Exec>:指定要执行的操作。
      • <Command>C:\xcopy\xcopy.bat</Command>:要执行的命令为运行 C:\xcopy\xcopy.bat 脚本。
      • <WorkingDirectory>C:\xcopy\</WorkingDirectory>:脚本的工作目录。

(三)编写定时任务一键配置脚本 C:\xcopy\1 - 定时任务一键配置.bat

该脚本用于通过命令行快速创建定时任务。

@echo off
echo 当前路径是:%~dp0
schtasks /create /tn "定时任务同步文件夹" /XML %~dp0/etc/文件夹定时同步.xml  /ru SYSTEM /F
pause
代码解释
  1. @echo off 关闭命令行窗口中的命令回显,使输出更加简洁。

  2. echo 当前路径是:%~dp0 显示当前脚本所在的路径。%~dp0 是一个批处理变量,表示当前脚本的完整路径和驱动器号。

  3. schtasks /create /tn "定时任务同步文件夹" /XML %~dp0/etc/文件夹定时同步.xml /ru SYSTEM /F

    • schtasks /create:用于创建一个新的计划任务。
    • /tn "定时任务同步文件夹":指定任务的名称为“定时任务同步文件夹”。
    • /XML %~dp0/etc/文件夹定时同步.xml:从指定的 XML 文件中读取任务配置信息。
    • /ru SYSTEM:指定任务以系统账户身份运行,保证任务在各种情况下都能正常执行。
    • /F:强制创建任务,如果同名任务已存在,则覆盖它。
  4. pause 暂停脚本执行,等待用户按下任意键后关闭命令行窗口。

(四)创建定时任务

  1. 找到 C:\xcopy\1 - 定时任务一键配置.bat 文件,右键单击该文件,选择“以管理员身份运行”。

Image description

  1. 运行脚本后,命令行窗口会显示当前脚本所在的路径,并执行创建定时任务的操作。等待脚本执行完毕后,按下任意键关闭命令行窗口。

四、验证定时备份功能

等待大约 1 分钟后,打开远程服务器的共享文件夹 \\192.168.1.100\Share\back_dir\192.168.1.101,查看是否已经成功拷贝了本地 C:\to_back_dir 文件夹中的内容。后续每次执行任务时,只会增量拷贝新增或者修改的文件。

五、注意事项

  • 网络连接:确保客户端和服务器之间的网络连接稳定,否则可能会导致备份任务失败。可以通过 ping 命令测试网络连通性。
  • 权限问题:若共享文件夹的访问权限发生变化,需要及时更新 xcopy.bat 脚本中的用户名和密码信息。同时,要保证客户端有足够的权限访问远程共享文件夹。
  • 任务监控:定期检查备份任务的执行情况,避免因各种原因导致备份中断。可以查看任务计划程序中的任务历史记录,了解任务的执行状态。