如何用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
相关产品推荐
相关产品推荐

