答案1
这里的代码稍微少一些:
您需要读取 CSV,结合名字和姓氏,清空姓氏列,返回修改后的对象,然后再次导出。
$SourcePath = "C:\Install\testabc.csv"
$DestinationPath = "C:\Install\testbcd.csv"
Import-Csv $SourcePath -Delimiter ";" -Encoding UTF8 | ForEach-Object {
$_."Versand Vorname" = "{0} {1}" -f $_."Versand Vorname", $_."Versand-Nachname"
$_."Versand-Nachname" = ""
$_
} | Export-Csv $DestinationPath -NoTypeInformation -Force -Delimiter ";" -Encoding UTF8
如果你想要不带引号的 - 我不会建议因为有些字段需要引号,您可以使用以下内容:
如果你使用的是 PowerShell 7+,你可以添加-UseQuotes AsNeeded
到Export-CSV
如果您使用的是 PowerShell 6 及更低版本,则可以在创建新文件后替换它们,只需将以下几行添加到脚本中:
$File = Get-Content $DestinationPath -Encoding UTF8
$File -replace '"','' | Out-File $DestinationPath -Encoding utf8 -Force
不过,我不建议更换引号
答案2
没有 powershell,但也许你有记事本++在眼前?
如果您有:
- 使用 NP++ 打开 CSV
- 按 [Strg]+[H] 打开替换对话框窗口
- 在左下角,将模式设置为正则表达式
- 搜索:(
^([^;]+);
正是这种模式!) - 用。。。来代替:
$1
- 点击按钮“全部替换”
对我有用,也可能对你有帮助:)
答案3
我相信这就是你想要的
我已经在 C:\Temp 文件夹中进行了导入和导出,只需针对您的使用情况进行更改即可
$objs =@();
$output = Import-csv -Path C:\Temp\test.csv -Delimiter “;”| ForEach {
$Object = New-Object PSObject -Property @{
'Versand Vorname' = [String]::Concat($_.'Versand Vorname',' ',$_.'Versand-Nachname')
'Versand-Nachname' = ''
'Versand-Zusatz' = $_.'Versand-Zusatz'
'Versand-Firma' = $_.'Versand-Firma'
'Versand' = $_.'Versand'
}
$objs += $Object;
}
$objs
$objs | Export-CSv C:\Temp\temp.csv -NoTypeInformation -Delimiter “;”