【问题标题】:Change delimiter in a csv from ; to ,从 ; 更改 csv 中的分隔符至 ,
【发布时间】:2017-12-05 02:34:29
【问题描述】:

我似乎无法将 .csv 中的分隔符从 ; 更改为 ,

问题是我们的一位海外客户由于区域设置的原因默认分隔符为;,但我们的系统需要, 分隔符。

我不能使用-replace,因为某些字符串条目中有分号需要保留在那里。

以下是我尝试过的选项:

Import-Csv -path $home\ | Export-Csv C:\Users\Dean\Desktop\test.csv -useculture

Import-Csv -path $home | Export-Csv C:\Users\Dean\Desktop\test\test.csv -Delimiter ","

Import-Csv -path $home | Export-Csv C:\Users\Dean\Desktop\test.csv -Replace "^\"|\"$", ""

我也试过

Import-Csv -UseCulture | ConvertTo-Csv | Out-File and Import-Csv -Delimiter | ConvertTo-Csv | Out-File

这些选项都不会抛出错误,但再次检查 csv 时分隔符仍然是 ;。我唯一看到这些 args 工作的情况是,如果我将 csv 导出或输出到没有 -delimiter-useculture arg 的位置。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    使用 ; 创建一个 csv作为分隔符:

    Get-ChildItem c:\ | Select-Object FullName, Name, LastWriteTime |Export-Csv c:\temp\test.csv -Delimiter ';' -notypeinformation
    

    csv 样本:

    "FullName";"Name";"LastWriteTime"
    "C:\APP-V_Global";"APP-V_Global";"8/5/2013 12:45:04 PM"
    "C:\Program Files";"Program Files";"10/4/2017 7:48:06 AM"
    "C:\Program Files (x86)";"Program Files (x86)";"10/10/2017 1:44:51 PM"
    "C:\Temp";"Temp";"12/5/2017 1:29:34 PM"
    "C:\Users";"Users";"9/6/2017 8:30:00 AM"
    "C:\Windows";"Windows";"11/17/2017 4:16:43 PM"
    

    导入 csv 告诉 powershell 分隔符是什么:

    $imported = Import-Csv c:\temp\test.csv -Delimiter ';'
    

    样本输出:

    $imported
    FullName                             Name                                 LastWriteTime
    --------                             ----                                 -------------
    C:\APP-V_Global                      APP-V_Global                         8/5/2013 12:45:04 PM
    C:\Program Files                     Program Files                        10/4/2017 7:48:06 AM
    C:\Program Files (x86)               Program Files (x86)                  10/10/2017 1:44:51 PM
    C:\Temp                              Temp                                 12/5/2017 1:29:34 PM
    C:\Users                             Users                                9/6/2017 8:30:00 AM
    C:\Windows                           Windows                              11/17/2017 4:16:43 PM
    

    将信息导出回来:

    $imported | Export-Csv C:\temp\test.csv -delimiter ',' -notypeinformation
    

    文件包含:

    "FullName","Name","LastWriteTime"
    "C:\APP-V_Global","APP-V_Global","8/5/2013 12:45:04 PM"
    "C:\Program Files","Program Files","10/4/2017 7:48:06 AM"
    "C:\Program Files (x86)","Program Files (x86)","10/10/2017 1:44:51 PM"
    "C:\Temp","Temp","12/5/2017 1:29:34 PM"
    "C:\Users","Users","9/6/2017 8:30:00 AM"
    "C:\Windows","Windows","11/17/2017 4:16:43 PM"
    

    基本流程有效,所以我想知道您的输入文件是否有问题。如果这不起作用,请考虑清理并发布示例 csv。

    【讨论】:

    • 感谢斯蒂芬的回复。我在想也许它也与输入文件有关,但我在家里的机器上遇到了同样的问题,进行了基本测试,例如将正在运行的进程列表导出到桌面并更改这些进程的分隔符。我还没有尝试过的一件事是在导入到 ConvertTo 或 Export 之前告诉 Powershell 在 Import-csv 期间分隔符是什么。如果这不起作用,我将上传 csv
    • 好的,现在按预期工作。我不确定之前的问题是什么,因为我唯一不同的是'$imported ='并在导入和导出中插入'-delimiter',但服务器上的原始脚本是通过任务调度程序运行的,我最初只是对其进行编辑,因此我将删除所有任务并使用作业触发器来防止将来出现并发症。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2020-07-06
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多