Powershell 其中对象保留空白行
我又一次被困在一件本该如此简单的事情上。我有一个CSV文件,我需要在其中做一些字符串修改并将其导出。数据如下所示: FullName -------- \\server\project\AOI \\server\project\AOI\Folder1 \\server\project\AOI\Folder2 \\server\project\AOI\Folder3\User 这在一定程度上是有效的,只是它删除了我的标题行,而且我还没有找到使用Get Content添加列的方法。为此,我必须使用Powershell 其中对象保留空白行,powershell,Powershell,我又一次被困在一件本该如此简单的事情上。我有一个CSV文件,我需要在其中做一些字符串修改并将其导出。数据如下所示: FullName -------- \\server\project\AOI \\server\project\AOI\Folder1 \\server\project\AOI\Folder2 \\server\project\AOI\Folder3\User 这在一定程度上是有效的,只是它删除了我的标题行,而且我还没有找到使用Get Content添加列的方法。为此,我必须使用
导入Csv
,这很好,但不断地重新加载同一个文件似乎效率低下。因此,我尝试使用Import Csv
而不是Get Content
重写上述内容:
$Folders=导入Csv C:\Folders.Csv
foreach($文件夹中的文件夹){
$Folder.FullName=$Folder.FullName.Replace(“\\server\AOI\”,“”)|
其中对象{$\匹配'\\'}|
其中对象{$\不匹配“用户文件”}
}
$Folders |导出Csv C:\Folders-mod.Csv-notype信息
我还没有添加用于添加新列的编码,但这会保留标题。但是,我最终得到了一堆空行,其中where Object
删除了该行,我能找到的唯一方法是通过get Content命令运行输出文件。对于本应简单的事情来说,这一切似乎过于复杂
那么,我遗漏了什么呢?感谢维修技师指出我做错了什么。这是我的最后一个脚本(添加了其他专栏):
我将使用表数组和pscustomobject来实现这一点
#Create an empty Array
$Table = @()
#Manipulate the data
$Fullname = Get-Content C:\Folders.csv |
ForEach-Object {$_.replace('\\server\project\', '')} |
Where-Object {$_ -match '\\'} |
#Removes User Folders rows from CSV
Where-Object {$_ -notmatch 'User'}
#Define custom objects
Foreach ($name in $Fullname) {
$Table += [pscustomobject]@{'Fullname' = $name; 'T/F' = 'FALSE'}
}
#Export results to new csv
$Table | Export-CSV C:\Folders-mod.csv -NoTypeInformation
这里还有另一种方法。。。[咧嘴笑]
输出
FullName T/F
-------- ---
\AOI False
\AOI\Folder1 False
\AOI\Folder2 False
注意
- 在属性名称中添加斜杠是。。。讨厌的[咧嘴笑]
这需要在每次需要访问时将属性名称用引号括起来。试试另一个名字——也许是“正确的”李> - 您可以使用
$单独测试空白数组项[行]
的东西真的很方便[regex]::Escape()
Where{$\uU-match'\\}
和Where{$\uU-notmatch'User Files}
移动到最后一行的一条语句中(并将其修复为包括FullName属性):$Folders;Where{$\uUUU2.FullName-match'\\\'-和$\uU3.FullName-notmatch'User Files}
谢谢您,TheMadTechnician!这消除了空白线。现在添加我的列。:)哦,当我在打印我的解决方案时,我看到你已经有了一个解决方案。在任何情况下,我都使用了您最初的“获取内容”方法,因此您可以使用稍微不同的方法来读取CSV并获取新的CSV,而无需导入:)
$FileList = @'
FullName
\\server\project\AOI
\\server\project\AOI\Folder1
\\server\project\AOI\Folder2
\\server\project\AOI\Folder3\User
'@ | ConvertFrom-Csv
$ThingToRemove = '\\server\project'
$FileList |
Where-Object {
# toss out any blank lines
$_ -and
# toss out any lines with "user" in them
$_ -notmatch 'User'
} |
ForEach-Object {
[PSCustomObject]@{
FullName = $_.FullName -replace [regex]::Escape($ThingToRemove)
'T/F' = $False
}
}
FullName T/F
-------- ---
\AOI False
\AOI\Folder1 False
\AOI\Folder2 False