如何用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
相关产品推荐
相关产品推荐

