PS, Robocopy добавление кавычек к значению переменной - PullRequest
0 голосов
/ 28 февраля 2020

Я выглядел высоко и низко, перепробовал все возможные варианты и, похоже, не могу найти решение этой проблемы. Я запускаю задание PS, которое вызывает robocopy, чтобы просто получить количество папок / файлов и размер родительской папки для списка папок, указанного во входном файле (CSV).

Вот фрагмент кода (по крайней мере, важные строки) ..

$Filter = '*.*'
$params = New-Object System.Collections.Arraylist
$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NFL","/MT:64","/NC","/NDL","/TS","/XJ","/R:0","/W:0"))
$InputFile = '\\server\org\archives\folder\Folders.csv'

$Paths = Get-Content $InputFile
    ForEach ($item in $Paths) {
        ListFolder $item

Function ListFolder {
$Script = robocopy $item NULL $Filter $params
}

Странно, что приведенный выше код работает для такой папки, как:
\ server \ Org \ Folder \ TST \ AC & D C Rock

Но ошибки на;
\ server \ Org \ Folder \ TST \ AC & D C Rock \ Thunder Struck, Ros ie и DirtyDeeds

Выполнение robocopy $ Paths NULL $ Filter $ params
или
Запуск robocopy "" $ Paths "" NULL $ Фильтр $ params
или
Запуск robocopy '' $ Paths '' NULL $ Filter $ params
Я получаю:

Source: - \\server\Org\Folder\TST\AC&DC Rock\Thunder Struck, Rosie and DirtyDeeds\  
     Dest - \\.\NUL\  
    Files : *.*  
  Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30  
------------------------------------------------------------------------------  
ERROR : Invalid Parameter #4 : "/L /S /NJH /BYTES /FP /NFL /MT:64 /NC /NDL /TS /XJ /R:0 /W:0"

Это запятая?

Запуск robocopy "" + $ Paths + "" NULL $ Filter $ params
Я получаю:

C:\Users\fisrt.last\+\
     Dest - \\server\Org\Folder\TST\AC&DC Rock\Thunder Struck, Rosie and DirtyDeeds\  
    Files : *.*  
  Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30  
------------------------------------------------------------------------------  
ERROR : Invalid Parameter #6 : "/L /S /NJH /BYTES /FP /NFL /MT:64 /NC /NDL /TS /XJ /R:0 /W:0"

Наконец ...
Запуск robocopy "$Paths "NULL $ Filter $ params
Я получаю:

Source - C:\Users\first.last\"\\server\Org\Folder\TST\AC&DC\  
     Dest - C:\Users\first.last\Rock\Thunder Struck, Rosie and DirtyDeeds\  
    Files : *.*  
  Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30  
------------------------------------------------------------------------------  
ERROR : Invalid Parameter #10 : "/L /S /NJH /BYTES /FP /NFL /MT:64 /NC /NDL /TS /XJ /R:0 /W:0"

Я попробовал много других итераций как пост d здесь для подобных предложений, сайтов MS и множества других.

1 Ответ

0 голосов
/ 28 февраля 2020

Если ваши пути содержат пробелы, вам нужно использовать кавычки, например:

$Paths = '\\server\Org\Folder\TST\AC&DC Rock\Thunder Struck, Rosie and DirtyDeeds'

ForEach ($item in $Paths) {
        $Script = robocopy $('"' + $item + '"') NULL $Filter $params
}

Надеюсь, это поможет?

...