Powershell读取CSV,然后在逗号处拆分其中一个字符串,但如果在引号内则不拆分

Powershell读取CSV,然后在逗号处拆分其中一个字符串,但如果在引号内则不拆分,powershell,Powershell,所以首先我要做的是 我有一个CSV文件,其中有一个要传递给Robocopy的参数列表 我使用Import csv打开此文件并将其传递给robocopy-我发现有一些文件夹无法复制-因此为了停止错误,我排除了它们-但我发现在将它们传递给robocopy之前需要拆分它们。我想能够做的是引用类似于CSV引用的内容-这样拆分就不会在引号内拆分 所以split(“我的文档”、“坏的,路径”)给出 而不是 My Documents Bad Path 我在想一个可能的研究途径是通过一些类似CSV的处理来实现

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

我使用Import csv打开此文件并将其传递给robocopy-我发现有一些文件夹无法复制-因此为了停止错误,我排除了它们-但我发现在将它们传递给robocopy之前需要拆分它们。我想能够做的是引用类似于CSV引用的内容-这样拆分就不会在引号内拆分 所以split(“我的文档”、“坏的,路径”)给出

而不是

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文件

类,文件夹,目录排除,文件排除PC1,C:\Users\e156479,“*,My 文档,“硬,路径”,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$类型共享,从而使所有源目录的备份路径一致-我已删除所有处理,以便使问题变得明显

这应该可以做到:

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

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

Ahhh!谢谢-使用正则表达式在引号中查找-将其更改为字符串中不存在的某个(#),拆分它-然后将其更改回-当然,我不确定引用-最后我使用了$DirExclutions=$DirExclutions-replace“”(.*),(.*),'$1#$2'-split','-replace'.','或$DirExclutions=$DirExclutions-replace'(.*),(.*),'$1#$2'-split','-replace'-replace'-
$myLine = 'Class,Folder,DirExclusions,FileExclusions PC1,C:\Users\e156479,".*,My Documents,""Hard, Path""",ntuser'
$myLine -replace '""(.*),(.*)"""','$1#$2' -split ',' -replace '#', ','