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

使用PowerShell调用排序.exe自动传参,循环测平均耗时失败求助

问题排查与修正方案

原代码的核心问题

  • $wshell未定义且使用方式错误:直接写$wshell.SendKeys('~')但未创建WScript.Shell对象,且SendKeys不能作为exe的命令行参数传递,完全不符合语法。
  • 时间计算逻辑错误:将日期转成字符串后做减法,字符串相减无法得到有效时间差,必须用Get-Date返回的DateTime对象计算时间间隔。
  • 循环次数少一次:$i -lt $cycles会让循环从1执行到49,只跑49次,达不到预期的50次。
  • exe输入传递方式错误:目标exe从标准输入读取数组,用SendKeys模拟回车既不可靠又没必要,应该直接通过管道传递输入。
  • 无效参数-Wait ??:属于语法错误,PowerShell直接调用exe会同步等待执行完成,不需要这种写法。

修正后的代码

$asm_average = 0
$cycles = 50
# 修正循环条件,确保执行50次
for ($i = 1; $i -le $cycles; $i++) {
    Write-Host "第 $i 次测试:"
    # 生成30个1-100的随机数数组
    $randomArray = Get-Random -InputObject (1..100) -Count 30
    $inputString = $randomArray -join ' '

    # 记录开始时间(保留DateTime对象,不转字符串)
    $startTime = Get-Date
    # 将数组字符串通过管道传给exe,自动完成输入
    $inputString | D:\lr\projects\helloworld\pp2.exe
    # 记录结束时间
    $endTime = Get-Date

    # 计算耗时(以毫秒为单位,可按需改用TotalSeconds等)
    $elapsedMs = ($endTime - $startTime).TotalMilliseconds
    Write-Host "本次耗时:$elapsedMs 毫秒`n"

    $asm_average += $elapsedMs
}

# 计算并输出平均时间
$asm_average = $asm_average / $cycles
Write-Host "平均运行时间:$asm_average 毫秒"

关键修正说明

  1. 输入传递:用$inputString | pp2.exe将数组字符串直接通过标准输入传给exe,彻底实现输入自动化,无需模拟按键。
  2. 时间计算:通过Get-Date获取DateTime对象,减法得到TimeSpan对象后,用TotalMilliseconds获取精确耗时。
  3. 循环次数:将$i -lt $cycles改为$i -le $cycles,保证循环执行满50次。
  4. 冗余代码清理:删除了错误的$wshell.SendKeys('~')和-Wait ??,简化调用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:52:49