Powershell将.csv格式(Import-csv)转换为字符串

时间:2014-06-02 09:59:03

标签: string powershell csv

我正在尝试将powershell脚本写入

  1. 读入csv文件
  2. 遍历csv文件中的每一行。
  3. 在每个循环中,我想将csv头和行值传递给另一个脚本,两者都是System.String类型格式。
  4. 特别是,我正在努力转换为字符串类型格式 - 这是最好的方法。 非常感谢。

    脚本1:

    $csvPath = 'C:\Temp\Scripts\trial_csv.csv'
    #Get the header
    $header = Get-Content $csvPath -TotalCount 1
    $IntermediateOutput = "'C:\Temp\Scripts\output'"
    $scriptPath = 'C:\Temp\Scripts\Temp.ps1'
    
    
    #Get the data 
    Get-Content $csvPath |
    Select -Skip 1 |
    ForEach-Object {
        $argumentList = @()
        $argumentList += ("-Header", $header)
        $argumentList += ("-row", $row)
        $argumentList += ("-IntermediateOutput", $IntermediateOutput)
        $argumentList += ("-index", $i )
    
    Invoke-Expression "& `"$scriptPath`" $argumentList"
    } 
    

    脚本2:

    从脚本1接收输入:

    Param(
        [Parameter(Mandatory=$True)] 
        [String]$header, #the header of csv file
        [Parameter(Mandatory=$True)]
        [String]$row,  #the row of the file, like "1,0,2,.."
        [Parameter(Mandatory=$True)]
        [String]$IntermediateOutput,  #intermediate directory
        [Parameter(Mandatory=$True)]
            [String]$index        #index 
        )
    
    Do something later (todo)
    $a = $header
    $b = $row
    $c = $IntermediateOutput
    $d=$index
    

2 个答案:

答案 0 :(得分:1)

您可以直接从新创建的$csv对象获取标头。在下面的示例中,$header成为字符串数组:

$header = ($csv[0].psobject.Properties | 
    where {$_.MemberType -eq "NoteProperty"  }).Name

另一种方法是使用Get-Content cmdlet读取第一行并将其拆分为,字符:

$header = (Get-Content $csvPath -TotalCount 1) -split ","

在您的代码中,$header等于null,因为$header = Write-Host $rows[1]未分配变量,它只执行操作。

答案 1 :(得分:1)

如果未引用csv中的数据,您应该可以直接从.csv文件中使用它,而无需执行Import-CSV:

$csvPath = 'C:\Temp\Scripts\trial_csv.csv'
$IntermediateOutput = "'C:\Temp\Scripts\output'" 
$Index = 1

#Get the header
$header = Get-Content $csvPath -TotalCount 1

#Get the data 
Get-Content $csvPath |
Select -Skip 1 |
 ForEach-Object {
  $argumentlist = "-Header '{0}' -row '{1}' -IntermediateOutput {2} -Index {3}" -f $header,$_,$IntermediateOutput,$Index

  #Execute script with argument list

  $Index++
  }