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

如何用PowerShell筛选SFTP中含当日日期的文件并下载

匹配SFTP中含当日日期的文件并复制到本地

由于你的SFTP文件实际创建时间相同,无法通过文件的创建/修改时间属性筛选目标文件,必须从文件名中提取日期进行匹配。

示例文件

REGISTRATION_ELI_20210422_071008.csv 
REGISTRATION_ELI_20210421_071303.csv
REGISTRATION_ELI_20210420_071104.csv

修正后的PowerShell代码

以下是针对需求优化后的代码,核心逻辑是生成当日日期的格式化字符串,然后筛选文件名中包含该日期的文件:

# 设置用户凭据
$password = ConvertTo-SecureString "password" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("gomgom", $password)

# 建立SFTP会话(修正原代码中的凭据变量名错误)
$SFTPSession = New-SFTPSession -ComputerName 172.16.xxx.xxx -Credential $creds -AcceptKey

# 设置本地路径和SFTP基础路径
$LocalPath = "D:\WORK\Task - Script\20221010 - AJK - ITPRODIS380 - upload file csv ke sql server\csvfile"
$SftpBasePath = '/Home Credit/Upload/'

# 获取当日日期的yyyyMMdd格式字符串,与文件名中的日期格式匹配
$todayDate = Get-Date -Format "yyyyMMdd"

# 列出SFTP上的目标CSV文件,筛选出文件名包含当日日期的文件
$targetFile = Get-SFTPItem -SessionId $SFTPSession.SessionID -Path "$SftpBasePathREGISTRATION_ELI_*.csv" | 
              Where-Object { $_.Name -match "_$todayDate_" }

# 找到目标文件则复制到本地,否则提示无匹配
if ($targetFile) {
    Get-SFTPItem -SessionId $SFTPSession.SessionID -Path $targetFile.FullName -Destination $LocalPath
    Write-Host "已成功复制文件:$($targetFile.Name)"
} else {
    Write-Host "未找到包含当日日期($todayDate)的文件"
}

# 关闭SFTP会话
Remove-SFTPSession $SFTPSession -Verbose

关键说明

  • 用Get-Date -Format "yyyyMMdd"生成与文件名一致的日期格式串
  • 通过Where-Object结合正则匹配,确保只筛选出文件名中包含当日日期的文件(下划线包裹日期避免部分匹配)
  • 修正了原代码中凭据变量名错误($Credential改为$creds)
  • 增加了文件存在性判断,避免无匹配时的无效操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:05:48