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

如何用PowerShell生成带题号的Moodle Aiken格式试题?

PowerShell处理Moodle Aiken格式试题实现方案
# 定义三个文件的路径,可根据实际存储位置修改
$sourceQuizPath = "C:\Users\Administrator\Desktop\SourceQuiz.txt"
$answerKeyPath = "C:\Users\Administrator\Desktop\AnswerKey.txt"
$outputPath = "C:\Users\Administrator\Desktop\Moodle_Aiken_Output.txt"

# 读取答案文件,过滤空行后存入数组,索引从0开始对应第1题到第N题
$answerList = Get-Content $answerKeyPath | Where-Object { $_ -match '\S' } | ForEach-Object { $_.Trim().ToUpper() }

# 初始化当前题号计数器(对应答案数组的索引)
$currentQuestionIndex = 0
# 初始化输出内容数组
$outputContent = @()

# 逐行处理试题文件
Get-Content $sourceQuizPath | ForEach-Object {
    # 先去除行尾空格
    $line = $_.TrimEnd()

    # 跳过空行避免格式错乱
    if (-not $line) { return }

    # 判断是否为选项行:行内容去掉前导空格后以a/b/c/d加右括号开头
    if ($line.TrimStart() -match '^[a-d]\)') {
        # 是选项行,去除前导空格
        $line = $line.TrimStart()
    }

    # 行首字母大写
    $line = $line.Substring(0,1).ToUpper() + $line.Substring(1)

    # 将处理后的行加入输出数组
    $outputContent += $line

    # 判断当前行是否为D选项行,是则添加ANSWER行
    if ($line.StartsWith("D)")) {
        $outputContent += "ANSWER: $($answerList[$currentQuestionIndex])"
        # 题号计数器加1,对应下一题的答案
        $currentQuestionIndex++
    }
}

# 将最终内容输出到文件,使用UTF8编码避免乱码
$outputContent | Out-File $outputPath -Encoding utf8

关键逻辑说明

  • 答案提前读取为数组,通过$currentQuestionIndex计数器和试题顺序一一对应,不会出现答案匹配错误
  • 只有选项行才会去除前导空格,题号行的数字+)格式完全保留,符合格式要求
  • 所有非空行都会执行首字母大写逻辑,无遗漏
  • 匹配到D选项行后自动插入对应顺序的答案行,无需手动对照

注意:如果你的试题选项有E、F等更多选项,只需要把匹配D选项的判断条件修改为对应最后一个选项的字母即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:27:02