如何让PowerShell脚本自动读取同目录下的任意CSV文件?
PowerShell脚本读取同目录任意CSV文件的解决方案
当然可以省去手动重命名CSV为input.csv的步骤,不能只简单移除input.csv的指定——直接移除的话$inputFile变量会为空,脚本执行时会报错。你需要通过PowerShell的文件检索命令自动获取脚本目录下的CSV文件,以下分两种场景给出具体实现:
场景1:脚本同目录仅存在一个CSV文件
这种情况可以直接获取该唯一CSV的完整路径,替换原脚本开头的$inputfile = "input.csv"为:
# 获取脚本所在目录的完整路径 $scriptDir = $PSScriptRoot # 检索目录下的CSV文件,取第一个(唯一的那个)的完整路径 $inputFile = Get-ChildItem -Path $scriptDir -Filter *.csv | Select-Object -First 1 -ExpandProperty FullName
场景2:脚本同目录存在多个CSV文件
如果目录下有多个CSV,需要添加选择逻辑,避免脚本误读文件,替换代码如下:
$scriptDir = $PSScriptRoot # 收集目录下所有CSV文件 $csvFiles = Get-ChildItem -Path $scriptDir -Filter *.csv # 处理不同情况 if ($csvFiles.Count -eq 0) { Write-Error "脚本目录下未找到任何CSV文件,请检查后重试" exit 1 } elseif ($csvFiles.Count -gt 1) { Write-Host "找到多个CSV文件,请选择要处理的文件:" # 列出所有CSV供选择 for ($i = 0; $i -lt $csvFiles.Count; $i++) { Write-Host "$($i+1). $($csvFiles[$i].Name)" } # 获取用户选择 $choice = Read-Host "请输入对应编号" # 转换为数组索引(从0开始)并获取选中文件的完整路径 $inputFile = $csvFiles[$choice - 1].FullName } else { # 仅一个CSV时直接获取路径 $inputFile = $csvFiles.FullName }
替换完成后,原脚本中使用$inputFile读取文件的逻辑(比如Import-Csv $inputFile)无需修改,即可自动适配目录下的CSV文件。
内容的提问来源于stack exchange,提问作者Xg3r4dx
相关产品推荐
相关产品推荐

