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

PowerShell实现:仅处理sFTP位置中行数大于1的文本文件

PowerShell统计文本文件行数并筛选处理

原代码问题分析

  1. 错误地将统计出的行数覆盖写入原文件,直接破坏了原文件内容,完全偏离统计行数的初衷
  2. 硬编码使用"``r``n"作为分隔符,若文件采用Unix风格换行符"``n",会导致行数统计不准确

本地文本文件处理方案

以下代码可正确统计每个txt文件的行数,并根据行数判断是否执行加载流程:

$paramDest = "C:\All\"
Get-ChildItem $paramDest -Filter *.txt | ForEach-Object {
    # 统计行数:兼容Windows/Unix换行符,两种方式可选
    # 方式1:统计包含空行的总行数
    $lineCount = (Get-Content $_.FullName).Count
    # 方式2:统计排除空行的有效行数
    # $lineCount = ($_ | Get-Content -Raw) -split "`r?`n" | Where-Object { $_ -ne '' } | Measure-Object | Select-Object -ExpandProperty Count

    Write-Host "文件 $($_.Name) 行数:$lineCount"

    # 行数大于1时执行加载流程
    if ($lineCount -gt 1) {
        Write-Host "开始加载文件:$($_.FullName)"
        # 在此处添加你的加载逻辑,例如导入数据库、解析内容等
        # 示例:Import-Csv $_.FullName | Out-SqlTable -Server "dbserver" -Table "TargetTable"
    } else {
        Write-Host "忽略文件:$($_.Name)"
    }
}

SFTP服务器文件处理方案

PowerShell原生不支持SFTP,通常借助WinSCP .NET组件实现远程文件操作,步骤如下:

  1. 从WinSCP官网下载.NET组件,将WinSCPnet.dll放在脚本同目录
  2. 使用以下代码连接SFTP、统计行数并处理:
# 加载WinSCP组件
Add-Type -Path "WinSCPnet.dll"

# 配置SFTP连接参数
$sftpParams = [WinSCP.SessionOptions]@{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "你的SFTP服务器地址"
    UserName = "账号"
    Password = "密码"
    # 若使用密钥认证,替换为SshPrivateKeyPath = "私钥文件路径"
    SshHostKeyFingerprint = "服务器公钥指纹(可从WinSCP客户端获取)"
}

$session = [WinSCP.Session]::new()
try {
    $session.Open($sftpParams)
    # 获取远程目录下的所有txt文件
    $remoteFiles = $session.ListDirectory("/远程目标目录").Files | Where-Object { $_.Name -match "\.txt$" -and !$_.IsDirectory }

    foreach ($remoteFile in $remoteFiles) {
        # 下载到本地临时目录
        $localTempPath = Join-Path $env:TEMP $remoteFile.Name
        $session.GetFileToDirectory($remoteFile.FullName, $env:TEMP)

        # 统计行数
        $lineCount = (Get-Content $localTempPath).Count
        Write-Host "远程文件 $($remoteFile.Name) 行数:$lineCount"

        if ($lineCount -gt 1) {
            Write-Host "开始加载远程文件:$($remoteFile.FullName)"
            # 在此添加加载逻辑
        } else {
            Write-Host "忽略远程文件:$($remoteFile.Name)"
        }

        # 删除本地临时文件
        Remove-Item $localTempPath -Force
    }
}
finally {
    $session.Dispose()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:40:35