0

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

4

2 回答 2

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 | ...
}
于 2013-08-05T16:59:16.140 回答
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 行的第二项)

于 2013-08-05T13:49:14.973 回答