循环通过CSV列

时间:2013-08-05 12:42:40

标签: powershell csv

我有一个简短的脚本,我在其中递归搜索字符串并写出一些结果。但是我有数百个要搜索的字符串,所以我想从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值?

2 个答案:

答案 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行上的第二项)