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

PowerShell脚本求助:实现按字母顺序向API发送文件并配置间隔休眠

修正你的PowerShell脚本问题

让我帮你梳理下当前脚本里的问题,然后给出完全贴合你需求的修正版本:

先说说现有脚本里的几个核心问题

  • 语法与变量引用错误:你的Invoke-RestMethod参数写法有问题,$LocalFile是FileInfo对象,直接放进双引号里会输出对象名称而非完整文件路径,得用$LocalFile.FullName;另外参数顺序、引号包裹也有错误,脚本块里的分号位置也不对。
  • 休眠逻辑顺序颠倒:你现在是先判断计数是否为偶数就休眠,再处理文件——这会导致第2个文件还没发送就先休眠了,完全不符合“每发送2个文件后休眠”的需求。
  • 未过滤文件类型:Get-ChildItem默认会把文件夹也包含进来,得加-File参数只处理文件。
  • 脚本块未执行:你定义了$command但没实际运行,等于发送请求的代码根本没生效。
  • 排序可选调整:你用了Sort-Object -Descending是按字母倒序排列,如果需求是正序,去掉这个参数就行。

修正后的完整脚本

$url = "https://anywebserver"
$localfolder = "c:\folder"

# 切换到目标文件夹(其实用FullName的话可以省略这一步)
Set-Location $localfolder

# 获取文件夹下所有文件,按字母正序排列(要倒序就加 -Descending)
$localfiles = Get-ChildItem -Path $localfolder -File | Sort-Object Name
$count = 0

foreach ($LocalFile in $localfiles) {
    $count++
    Write-Host "正在处理文件:$($LocalFile.Name),第$count个文件"

    # 每个文件重复发送100次请求
    for ($i = 1; $i -le 100; $i++) {
        try {
            # 发送POST请求,用FullName传递正确的文件路径
            $result = Invoke-RestMethod -Method Post -Uri $url -InFile $LocalFile.FullName
            Write-Host "    $($LocalFile.Name) 第$i次发送成功"
        }
        catch {
            # 捕获异常,避免单个请求失败导致整个脚本中断
            Write-Warning "    $($LocalFile.Name) 第$i次发送失败:$_"
        }
    }

    # 每发送完2个文件后休眠10秒
    if ($count % 2 -eq 0) {
        Write-Host "已完成$count个文件的发送任务,休眠10秒..."
        Start-Sleep -Seconds 10
    }
}

关键修正点说明

  1. 文件路径处理:用$LocalFile.FullName确保API能拿到正确的文件路径,避免因路径错误导致请求失败。
  2. 休眠逻辑调整:先处理完文件,再判断计数是否为偶数,这样就能实现“发完2个文件后休眠”的需求。
  3. 异常处理:添加try/catch块,单个请求失败不会中断整个脚本,还能看到失败原因。
  4. 进度可视化:用Write-Host输出实时进度,比你之前用$command查看进度更直观。
  5. 文件过滤:-File参数确保只处理文件,不会把文件夹当成文件发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:07:42