我有一个CSV,它保存关于文件路径的信息。如果合并单元格并在它们之间添加"/“,则可以创建完整的文件路径。有时,这些单元格可以是空的,或者其中有多个目录。例如:桌面/FolderA/FolderB
因此,我得到了剧本:
Import-Csv -Path 'test.csv' |
Select-Object @{Name='Path';Expression={$_.Folder1, "/" ,$_.Folder2, "/",$_.Folder3, "/",$_.Folder4, "/",$_.Folder5, "/", $_.Folder6, -join ','}} |
Export-Csv 'OutputTestFile.csv' -NoTypeInformation这产生的输出测试文件看起来有点像:
HR Central // HR Central / Documents /, 人力资源中央/雇员服务//雇员服务-内部/雇员服务/程序/a/b/c, 人力资源/人力资源业务伙伴//人才和收购-内部/人力资源业务伙伴/,
因为有双斜杠,所以不能提供干净的文件路径。空间也是一个问题。我甚至不需要把它出口回CSV。我只需要能够获取一个列表/文件路径数组,这样我就可以在一个环境中创建文件结构。
理想情况下,我希望文件路径看起来如下:
人力资源/人力资源业务伙伴/人才和收购-内部/人力资源业务伙伴/, 人力资源中央/人力资源中心/文件/,
发布于 2019-07-03 15:46:33
另一种选择:
foreach ( $csvLine in $(Import-Csv -Path 'test.csv')) {
$rawPath = $csvLine | Select-Object @{
Name='Path';
Expression = { @( $_.Folder1,
$_.Folder2,
$_.Folder3,
$_.Folder4,
$_.Folder5,
$_.Folder6) -join '/'
}
}
# remove multiple solidi
$rawPath.Path.Split(
'/',
[System.StringSplitOptions]::RemoveEmptyEntries) -join '/'
} 发布于 2019-07-03 15:29:08
许多备选方案之一:
Import-Csv -Path 'test.csv' |
Select-Object @{
Name = 'Path'
Expression = {
$row = $_
$folders = @()
1..6 | ForEach-Object {
$folder = $row."Folder$_"
if ($folder -and -not ([String]::IsNullOrEmpty($folder.Trim())))
{
$folders += $folder.Trim()
}
}
return $folders -join "/"
}
}发布于 2019-07-08 20:55:32
如果您使用PSObject,这可能会非常短。如果您只想要一个路径数组,我会在一个ForEach-Object循环中这样做:
Import-Csv test-csv | Select Folder[1-6] | ForEach-Object {
$_.psobject.Properties.where({$_.Name -match '^Folder[1-6]$' -and !([string]::IsNullOrWhiteSpace($_.Value))}).Value -join '/' -replace '(?<=/) | (?=/)'}
}https://stackoverflow.com/questions/56872604
复制相似问题