Итак, первое, что я пытаюсь сделать, у меня есть файл CSV, в котором есть список аргументов, которые нужно передать в Robocopy.

Я открываю это с помощью Import-csv и передаю в robocopy - я обнаружил, что есть папки, которые я не могу скопировать - поэтому, чтобы остановить ошибки, я исключаю их - но обнаружил, что мне нужно разделить их, прежде чем передать их в robocopy. Что я хочу сделать, так это процитировать их аналогично цитированию CSV, чтобы разделение не разделялось внутри кавычек, поэтому разделение ("Мои документы", "Плохо, Путь" "") дает

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 $ обрабатываются, чтобы путь резервного копирования был согласован для всех исходных каталогов - я удалил всю эту обработку, чтобы сделать мою проблему очевидной

0
Ross 14 Июн 2018 в 07:15

1 ответ

Лучший ответ

Это должно помочь:

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

Если '#' по какой-либо причине невозможно, вы можете использовать другой фиктивный разделитель, e. грамм. "!"

1
f6a4 14 Июн 2018 в 05:31