【问题标题】:Read CSV file then split the values and create a global variable读取 CSV 文件,然后拆分值并创建一个全局变量
【发布时间】:2019-06-23 00:13:00
【问题描述】:

尝试读取具有逗号分隔行的文件。我想读取每一行并拆分为数组并使用数组值创建一个全局变量。

文件内容:

服务器 1,组件 1,服务 1 服务器2,批处理器2,服务2 服务器3,批处理器3,服务3

我想在读取每一行时创建一个全局变量作为目录路径,如下所示。

$deployment.path = D:\server1\component1\service1
$deployment.path = D:\server2\component2\service2
$deployment.path = D:\server3\component3\service3

但我得到空值。

代码:

$fileIn  = 'D:\Test\build.properties.dev'
(Import-Csv -Path $filein -Delimiter ',' -Header 'ServerName','ComponentName','ServiceName' | ForEach-Object {
    $deployment.path = D:\$_.ServerName\$_.ComponentName\$_.ServiceName
    if (!(Test-Path $deployment.path)) {
        New-Item -ItemType Directory -Force -Path $deployment.path
    }
})

【问题讨论】:

  • $Deployment 来自哪里?您正在分配一个值 t。那个 $Var 的道具,但我看不出它来自哪里......
  • 另外,为什么你的管道用括号括起来?这似乎不需要...
  • 还有...你在哪里get null values?
  • 这对你有用吗?
  • @Avinash 您好,您能接受我下面的回答,因为它似乎可以解决您的问题吗?谢谢!

标签: powershell


【解决方案1】:

这样做:

$csv = Import-Csv -Path 'D:\Test\build.properties.dev'

$csv | ForEach-Object {
    $path = "D:\$($_.servername)\$($_.componentname)\$($_.servicename)"
    if (!(Test-Path $path)) {
        New-Item -Itemtype Directory -Path $path -Confirm:$false -Force
    }
}

如果您的 .csv 没有标题,请添加它们。如果不能,请以编程方式进行。例如,您可以使用Tee-Object。上述原则同样适用。

【讨论】:

  • 在我的 win7ps5.1 设置中,New-Item cmdlet 需要 -Force 参数来创建完整路径。你有没有测试过你的代码以确保它会构建整个路径,如果它不存在?
  • 我没有在 Windows 7 上测试。如果我使用的命令对 Windows 7 有要求,请添加该参数。我在 StackOverflow 上的 Chromebook 上写了这个。当时没有可用的 Powershell。我相信这会奏效。我确实在上面添加了 -Force 参数。
  • 酷!我认为在所有操作系统上创建多级路径仍然需要它。感谢您添加该参数! [咧嘴]
  • 我对此进行了测试。我不需要-Force。 WMF 5.1,Windows 1803。
  • 感谢您的反馈...感谢您提供的信息! [咧嘴]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2020-11-30
相关资源
最近更新 更多