You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用WinSCP文件掩码仅下载1天内的文件而非整个目录?

仅下载WinSCP中1天内的文件(替代目录批量拉取)

完全可以通过WinSCP的文件掩码+时间条件实现,不用拉取整个目录,直接精准过滤出1天内修改的文件。具体修改方法如下:

核心原理

WinSCP支持带时间维度的文件掩码,用>=1D表示最后修改时间在1天以内的文件,结合递归参数就能遍历所有子目录并只下载符合条件的文件。

脚本修改步骤

  1. 移除原脚本中拉取整个目录的逻辑,改用TransferOptions设置文件掩码
  2. 在GetFiles命令中传入带时间过滤的TransferOptions,同时开启递归遍历子目录

修改后的完整PowerShell脚本示例

# 配置WinSCP会话参数
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp  # 根据实际协议调整(SFTP/FTP等)
    HostName = "你的服务器地址"
    UserName = "你的用户名"
    Password = "你的密码"
    SshHostKeyFingerprint = "你的SSH密钥指纹"  # SFTP需要,FTP可忽略
}

$session = New-Object WinSCP.Session
try {
    $session.Open($sessionOptions)

    # 设置传输选项:仅匹配1天内修改的文件
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.FileMask = ">=1D"

    # 执行下载:递归遍历所有子目录,只下载符合条件的文件
    # 第一个参数是远程根路径,第二个是本地目标路径,$False表示不删除远程文件
    $transferResult = $session.GetFiles("/远程根目录/*", "C:\本地目标目录\*", $False, $transferOptions)

    # 检查下载过程中的错误
    $transferResult.Check()

    # 输出成功下载的文件列表
    foreach ($transfer in $transferResult.Transfers) {
        Write-Host "已下载: $($transfer.FileName)"
    }
}
finally {
    # 关闭会话
    $session.Dispose()
}

额外说明

  • 时间掩码可灵活调整:>=1H(1小时内)、>2024-05-20(指定日期之后)等,根据需求修改
  • WinSCP 5.1及以上版本支持该时间掩码语法,确保你的版本符合要求
  • 该逻辑只会下载文件,不会拉取空目录或不符合时间条件的目录本身

内容的提问来源于stack exchange,提问作者JM1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:45:12