powershell - 当导入的文件来自 Import-csv 时,Powershell ExportCSV 导出一个空文件
问题描述
我有一个 CSV 文件,我需要将分隔符从逗号更改为分号。我用以下命令解决了这个问题
(Import-CSV $File) | Export-Csv $File -delimiter ';' -notypeinformation
但是,当导入的 CSV 文件只包含我假设正在作为标题处理的一行时。它会删除输出文件中的这一行,并变成一个空文件。但是,当我有不止一行并且 csv 包含标题和一些数据时,导出的文件正在使用标题和数据正确执行。
我用来在脚本开头设置头文件的代码
#set csv headers
Set-Content -Path "$FolderNameCiTypeDelta" -Value "name,type,location,size"
我试过添加代码
(Import-CSV $File -Header "name,type,location,size") | Export-Csv $File -delimiter ';' -notypeinformation
但这只是我指定的标题的额外行。
[编辑]
我测试的 2 个 csv 文件包含以下几行
使用 import --> export 命令变为空的文件包含
name,type,location,size
使用 import --> export 命令执行我需要的文件包含
name,type,location,size
test,extra,line
解决方案
您可以执行以下操作:
$file = 't.txt'
$contents = Get-Content $file -totalcount 2
if ($contents.Count -gt 1) {
(Import-Csv $file) | Export-Csv $file -Delimiter ';' -NoType
}
if ($contents.Count -eq 1) {
$contents -replace ',',';' | Set-Content $file
}
这里的想法是读取文件的两行。如果它只包含一行,它将-replace
用于修复您的分隔符。如果它有超过两行,它将使用*-Csv
命令。
-replace
仅当您的字段值中没有逗号时,该部分才有效。如果您的字段中确实有逗号,那么您应该在字段周围使用文本限定符(最有可能是双引号)。在这种情况下,您可以简单地使用-replace '","','";"'
.
推荐阅读
- javascript - JavaScript new.window 使用 javascript 函数
- android - Android文件选择器和上传获取文件未找到错误
- python - 如何智能更改项目范围内的函数签名?
- php - Laravel:一个数组有一个对象,排序后将其转换为数组
- c# - 如何解密 AES CBC?
- ruby - 无法使用 RSpec(rspec:找不到命令)
- typescript - 通用元组是否可以将 keyof 与其值匹配?
- html - 我可以使用 Tailwind CSS 实用程序类创建砌体布局吗?
- flutter - 如何转换计算颤振的这个结果
- android - 你在哪里禁用android studio中的“向上”箭头转换drawerLayout?