如何批量执行指定分层目录下的多个Linqpad查询脚本?
解决方案推荐
三种方式都可以实现需求,没有优劣之分,你可以根据自己的使用习惯选择:如果日常习惯用终端操作,选lprun配合PowerShell/bash更方便;如果希望全程在Linqpad内操作,选主控脚本方案即可。
首选方案:用Linqpad自带的lprun命令行工具配合终端脚本
lprun是Linqpad官方自带的命令行执行工具,完美适配所有.linq格式的脚本,执行效果和你手动在Linqpad界面点运行完全一致,不需要额外处理脚本依赖、数据库连接配置等兼容性问题。
PowerShell 执行示例
# 遍历当前目录下所有子文件夹中的.linq脚本按顺序执行 Get-ChildItem -Path . -Filter *.linq -Recurse | ForEach-Object { Write-Host "正在执行脚本:$($_.FullName)" lprun $_.FullName # 遇到错误立即终止执行,不需要可以删掉下面判断 if ($LASTEXITCODE -ne 0) { Write-Error "脚本 $($_.FullName) 执行失败,错误码:$LASTEXITCODE" exit $LASTEXITCODE } }
Bash 执行示例
# 遍历当前目录下所有子文件夹中的.linq脚本按顺序执行 find . -name "*.linq" -type f | sort | while read -r script; do echo "正在执行脚本:$script" lprun "$script" # 遇到错误立即终止执行,不需要可以删掉下面判断 if [ $? -ne 0 ]; then echo "错误:脚本 $script 执行失败" exit 1 fi done
注意:使用前需要把lprun所在目录加入系统环境变量,或者写全lprun的绝对路径,默认安装路径为
C:\Program Files\LINQPad[版本号]\lprun.exe
备选方案:Linqpad 主控脚本方案
如果你不想离开Linqpad环境,可以直接写一个新的.linq主控脚本,调用Linqpad内置的Util.Run方法执行其他脚本:
// 主控脚本代码 // 可自定义脚本执行顺序,不需要遍历的话直接手动填路径即可 var scriptPaths = new List<string> { @"A\query1.linq", @"A\query2.linq", @"B\query3.linq", @"B\query4.linq", @"C\query5.linq", @"C\query6.linq" }; foreach (var path in scriptPaths) { var fullPath = Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), path); Console.WriteLine($"开始执行:{fullPath}"); var result = Util.Run(fullPath, QueryResultFormat.Text); if (result.ErrorLevel != 0) { Console.WriteLine($"执行失败:{fullPath},错误信息:{result.Error}"); break; } Console.WriteLine($"执行完成:{fullPath}"); }
直接在Linqpad中运行这个主控脚本即可,所有执行日志都会直接输出在Linqpad结果面板中。
内容的提问来源于stack exchange,提问作者andruidthedude
相关产品推荐
相关产品推荐

