如何在PowerShell中动态列出目录文件并为其编号
动态生成SQL查询脚本选择菜单的PowerShell实现
以下是适配你需求的代码,能自动读取Individual queries目录下的所有.sql文件并生成带编号的选择菜单,完全不用硬编码:
# 定义SQL查询脚本所在的子目录(基于主脚本位置自动拼接) $queryDir = Join-Path -Path $PSScriptRoot -ChildPath "Individual queries" # 获取目录下所有.sql文件,按文件名排序保证菜单顺序稳定 $sqlFiles = Get-ChildItem -Path $queryDir -Filter "*.sql" | Sort-Object Name # 输出菜单标题和分隔线 Write-Host "Individual Scripts" Write-Host "******************`n" # 遍历文件生成带编号的菜单 for ($i = 0; $i -lt $sqlFiles.Count; $i++) { Write-Host "$($i + 1). $($sqlFiles[$i].Name)" } # 获取并验证用户选择 do { $selectedNum = Read-Host "`n请输入要执行的脚本编号" # 检查输入是否是有效数字且在菜单范围内 if ($selectedNum -match '^\d+$' -and [int]$selectedNum -in 1..$sqlFiles.Count) { break } Write-Host "输入无效,请输入1到$($sqlFiles.Count)之间的数字" } while ($true) # 获取选中的脚本文件 $selectedScript = $sqlFiles[[int]$selectedNum - 1] # 执行你的SQL查询逻辑(替换成你已测试好的执行代码) Write-Host "`n正在执行脚本: $($selectedScript.Name)" # 示例:读取脚本内容(根据你的实际执行逻辑调整) $queryContent = Get-Content -Path $selectedScript.FullName -Raw # 这里调用你的SQL执行方法,比如: # Invoke-SqlCmd -Query $queryContent -ServerInstance "你的SQL服务器地址" -Database "目标数据库"
核心逻辑说明
- 动态适配脚本增删:用
Get-ChildItem自动扫描目标目录,不管后续加新脚本还是删旧脚本,菜单都会实时更新,不用改主脚本代码。 - 稳定的菜单顺序:通过
Sort-Object Name按文件名排序,避免文件列表乱序导致菜单编号混乱。 - 输入合法性校验:用
do-while循环强制用户输入有效编号,防止非法输入引发脚本错误。 - 路径可移植性:用
$PSScriptRoot获取主脚本所在目录,自动拼接子目录路径,把整个项目文件夹移到其他电脑也能正常运行。
内容的提问来源于stack exchange,提问作者WR7500
相关产品推荐
相关产品推荐

