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 があり、そのうちの 1 つを検索値として使用しますか? または、1 行に 1 つの検索パターンを持つ「通常の」テキスト ファイルがありますか?

前者の場合、次のコマンドでファイルを読み取ることができます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 行の 2 番目の項目)。

于 2013-08-05T13:49:14.973 に答える