You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PowerShell新手求助:FTP服务器按指定日期批量下载图片并记录文件名

批量从FTP下载指定日期的图片并记录文件名

没问题,我来帮你把单张下载的代码改成批量处理的版本,完美匹配你的需求——指定日期、下载所有对应图片、记录文件名到txt文件。

先给你完整的可直接使用的脚本,之后我会拆解关键部分帮你理解:

# 配置参数,根据你的实际情况修改
$UserName = "abc"
$Password = "abc"
$targetDate = "20201009"  # 你要下载的日期字符串
$localSaveFolder = "C:\Users\Desktop\PowerShell\Downloads"  # 本地保存文件夹
$ServerName = "10.196.195.167/22_test"
$logFilePath = Join-Path $localSaveFolder "downloaded_files_$targetDate.txt"  # 记录文件名的txt路径

# 确保本地保存文件夹存在,不存在则创建
if (-not (Test-Path $localSaveFolder)) {
    New-Item -ItemType Directory -Path $localSaveFolder | Out-Null
}

# 初始化WebClient对象并设置凭据
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($UserName, $Password)

try {
    # 获取FTP服务器上的文件列表
    $ftpDirectoryUri = New-Object System.Uri("ftp://$ServerName/")
    $fileList = $webclient.DownloadString($ftpDirectoryUri)

    # 筛选出包含目标日期的图片文件(这里假设都是.jpg格式,可根据需要修改)
    $targetFiles = $fileList -split "`r`n" | Where-Object { $_ -match "_$targetDate_" -and $_ -like "*.jpg" }

    if ($targetFiles.Count -eq 0) {
        Write-Host "未找到包含日期 $targetDate 的图片文件"
        exit
    }

    Write-Host "找到 $($targetFiles.Count) 个待下载文件,开始下载..."

    # 循环下载每个文件,并记录文件名到txt
    foreach ($remoteFile in $targetFiles) {
        # 处理FTP列表中的文件名(有些FTP服务器返回的列表会包含额外信息,这里取最后一段)
        $cleanFileName = ($remoteFile -split "\s+")[-1]
        $localFilePath = Join-Path $localSaveFolder $cleanFileName
        $remoteUri = New-Object System.Uri("ftp://$ServerName/$cleanFileName")

        try {
            $webclient.DownloadFile($remoteUri, $localFilePath)
            Write-Host "已下载:$cleanFileName"
            # 将文件名追加到日志文件
            Add-Content -Path $logFilePath -Value $cleanFileName
        }
        catch {
            Write-Host "下载失败:$cleanFileName,错误信息:$_"
        }
    }

    Write-Host "下载完成!文件名已记录到 $logFilePath"
}
catch {
    Write-Host "获取FTP文件列表失败,错误信息:$_"
}
finally {
    # 释放WebClient资源
    $webclient.Dispose()
}

关键部分解释:

  1. 参数配置:开头的变量都可以根据你的实际需求修改,比如目标日期、本地保存路径等,我都加了注释说明。
  2. 文件夹检查:脚本会自动创建本地保存文件夹,避免因为文件夹不存在导致下载失败。
  3. 获取FTP文件列表:通过DownloadString方法获取FTP目录下的所有文件信息,然后筛选出包含指定日期的.jpg文件。
  4. 文件列表处理:有些FTP服务器返回的列表会包含文件大小、日期等额外信息,所以用-split "\s+"分割后取最后一段作为纯文件名。
  5. 循环下载与日志记录:遍历每个目标文件,下载成功后就把文件名追加到txt文件里;如果下载失败会输出错误信息,不影响其他文件下载。
  6. 资源释放:最后用Dispose()释放WebClient资源,养成良好的编程习惯。

使用注意事项:

  • 请确保你的PowerShell有访问FTP服务器和本地文件夹的权限。
  • 如果你的图片格式不是.jpg,可以修改$_ -like "*.jpg"这部分,比如改成*.png或者去掉这个条件下载所有格式的文件。
  • 如果FTP服务器返回的文件列表格式和脚本处理的不一样(比如有些服务器返回的格式不同),可能需要调整$cleanFileName的处理逻辑,不过大部分标准FTP服务器都适用这个写法。

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

火山引擎 最新活动