【问题标题】:Powershell to Read a CSV then split one of the strings at commas but not if inside QuotesPowershell 读取 CSV 然后以逗号分隔其中一个字符串,但如果在引号内则不分隔
【发布时间】:2018-11-23 18:16:00
【问题描述】:

首先我要做的是 我有一个 CSV 文件,其中包含要传递给 Robocopy 的参数列表

我用 Import-csv 打开它并将其传递给 robocopy - 我发现有些文件夹我无法复制 - 为了阻止错误,我将它们排除在外 - 但发现我需要在将它们传递给之前将它们拆分机械复制。我想要做的是引用它们类似于 CSV 引用 - 这样拆分不会在引号内拆分 所以 split ("My Documents,""Bad, Path""") 给出了

My Documents
Bad, Path

而不是

My Documents
Bad
Path

我在想一个可能的调查方法是通过一些类似 CSV 的处理来管道它 - 我不确定从哪里开始找到可以做到这一点的命令

这是我的测试代码

import-csv "R:\t.csv" | where { $_.class -eq "PC1" } | % {
$_.DirExclusions
$_.FileExclusions
  $DirExclusions = $_.DirExclusions
  $FileExclusions = $_.FileExclusions
  $DirExclusions 
  $FileExclusions
  if ($DirExclusions -ne "" )  { $XD ="/XD" } 
  if ($FileExclusions -ne "" )  { $XF ="/XF" } 
  robocopy "$($_.Folder)" "R:\Backups\TEST" *.* /r:0 /w:1 $XD $DirExclusions.split(",") $XF $FileExclusions.Split(",") 
}

CSV 文件

类,文件夹,DirExclusions,FileExclusions PC1,C:\Users\e156479,".*,My 文档,""Hard, Path""",ntuser

输出显示它排除了什么

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : Thu Jun 14 14:07:32 2018

   Source : C:\Users\e156479\
     Dest : R:\Backups\TEST\

    Files : *.*

Exc Files : *ntuser*

 Exc Dirs : My Documents
            Hard
            Path
            .*

  Options : *.* /COPY:DAT /R:0 /W:1

实际代码更改了路径,以便处理 \ 和 C$ 类型的共享,以便备份路径对于所有源目录都是一致的 - 我已删除所有处理以使我的问题显而易见

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这应该可以解决问题:

    $myLine = 'Class,Folder,DirExclusions,FileExclusions PC1,C:\Users\e156479,".*,My Documents,""Hard, Path""",ntuser'
    $myLine -replace '""(.*),(.*)"""','$1#$2' -split ',' -replace '#', ','
    

    如果由于任何原因不能使用“#”,您可以使用另一个虚拟分隔符,例如。 G。 “!”

    【讨论】:

    • 啊!谢谢 - 使用正则表达式在引号内找到 , - 将其更改为字符串中无处的东西 (#),拆分它 - 然后将其改回 - 当然是的
    • 我不确定引用 - 最后我使用了 $DirExclusions = $DirExclusions -replace """(.*),(.*)""",'$1#$2' -split ',' -replace '#', ',' OR $DirExclusions = $DirExclusions -replace '"(.*),(.*)"','$1#$2' -split ',' -replace '# ', ','
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多