IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    在 Windows 7 上使用批处理脚本同步两个远程服务器间的文件

    血衫非弧の一存发表于 2024-09-02 00:00:00
    love 0

    本文介绍一个批处理脚本在两个远程服务器之间同步文件,并且在操作过程中添加时间戳以便后续管理和审计。

    1. 设置环境与变量

    首先,定义远程服务器的地址和文件路径,同时还要指定本地的临时存储目录。以下是相关变量的设置:

    :: 定义远程服务器和路径
    set SRC_SERVER=user@a.b.c.d
    set SRC_PATH=/Users/kelu/Public/offline
    set DEST_SERVER=user2@1.2.3.4
    set DEST_PATH=/home/app/kelutmp
    
    :: 定义密码
    set SRC_PASSWORD="password1"
    set DEST_PASSWORD="password2"
    
    :: 临时存储路径
    set TEMP_DIR=C:\Users\Administrator\Desktop\remote_sync
    

    这里的 SRC_SERVER 和 DEST_SERVER 分别是源服务器和目标服务器的地址,SRC_PATH 和 DEST_PATH 是对应的文件路径。TEMP_DIR 是用来存放中间文件的本地目录。

    2. 创建本地临时目录

    在执行文件传输操作前,确保本地有一个临时目录用于存储从源服务器下载的文件:

    :: 创建本地临时目录
    mkdir "%TEMP_DIR%" 2>nul
    

    这里使用了 2>nul 来忽略错误输出,避免目录已存在时的提示。

    3. 生成带有时间戳的目录名

    通过 for 循环来提取所需的年月日、时分( Windows 7 的 %date% 和 %time% 和其他系统有区别,如果是 Windows 10 需要自己验证一下):

    for /f "tokens=1-6 delims=/:. " %%a in ("%date% %time%") do (
        set "timestamp=%%b%%c%%d_%%e%%f"
    )
    

    此代码通过分隔符 /, :, ., 和空格提取年月日时分,最终生成格式如 20240901_1333 的时间戳。

    4. 文件传输与清理

    接下来,将从源服务器下载的文件传输到目标服务器,并在传输成功后删除源服务器上的文件:

    :: 从第一个远程服务器下载文件到本地临时目录
    pscp -pw "%SRC_PASSWORD%" -r %SRC_SERVER%:%SRC_PATH%/* %TEMP_DIR%	
    
    :: 将本地临时目录的文件上传到第二个远程服务器
    pscp -pw "%DEST_PASSWORD%" -r "%TEMP_DIR%\*" %DEST_SERVER%:%DEST_PATH%
    
    :: 如果上传成功,删除源服务器上的文件
    if %ERRORLEVEL%==0 (
        plink -ssh -pw "%SRC_PASSWORD%" -batch %SRC_SERVER% "rm -rf %SRC_PATH%/*"
        echo 已成功删除源服务器上的文件
    ) else (
        echo 文件传输失败,未删除源服务器上的文件
    )
    

    其中,pscp 是 PuTTY 提供的命令行工具,用于执行安全的文件传输操作。plink 则是一个用于执行远程命令的工具。%ERRORLEVEL% 检查上一步操作是否成功,如果成功则删除源服务器上的文件。

    5. 归档与日志管理

    最后,将本地的临时目录重命名为带时间戳的目录,以便于管理和备份:

    :: 移动临时文件夹到带时间戳的目录
    move "%TEMP_DIR%" "%TEMP_DIR%_%timestamp%"
    
    echo 文件传输完成
    

    这一步确保每次文件传输操作都有对应的本地备份,便于日后查看或还原。



沪ICP备19023445号-2号
友情链接