我有一个简短的脚本,我在其中递归搜索字符串并写出一些结果。但是我有数百个要搜索的字符串,所以我想从CSV文件中获取值,将其用作我的字符串搜索并移动到下一行。
这就是我所拥有的:
function searchNum {
#I would like to go from manual number input to auto assign from CSV
$num = Read-Host 'Please input the number'
get-childitem "C:\Users\user\Desktop\SearchFolder\input" -recurse | Select String -pattern "$num" -context 2 | Out-File "C:\Users\user\Desktop\SearchFolder\output\output.txt" -width 300 -Append -NoClobber
}
searchNum
如何通过CSV运行为每一行分配$ num值?
答案 0 :(得分:2)
您是否拥有包含多个列的CSV,其中一列是否要用作搜索值?或者你有一个“常规”文本文件,每行有一个搜索模式?
如果是前者,您可以使用Import-Csv
:
$filename = 'C:\path\to\your.csv'
$searchRoot = 'C:\Users\user\Desktop\SearchFolder\input'
foreach ($pattern in (Import-Csv $filename | % {$_.colname})) {
Get-ChildItem $searchRoot -Recurse | Select-String $pattern -Context 2 | ...
}
如果是后者,则简单的Get-Content
就足够了:
$filename = 'C:\path\to\your.txt'
$searchRoot = 'C:\Users\user\Desktop\SearchFolder\input'
foreach ($pattern in (Get-Content $filename})) {
Get-ChildItem $searchRoot -Recurse | Select-String $pattern -Context 2 | ...
}
答案 1 :(得分:0)
我认为你需要这样的东西
$csvFile = Get-Content -Path "myCSVfile.csv"
foreach($line in $csvFile)
{
$lineArray = $line.Split(",")
if ($lineArray -and $lineArray.Count -gt 1)
{
#Do a search num with the value from the csv file
searchNum -num $lineArray[1]
}
}
这将读取一个csv文件,并为每一行调用您的函数。给定的参数将是csv文件中的值(csv行上的第二项)