Как обращаться с каталогами с пробелами? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу использовать PowerShell с robocopy для перемещения большого количества файлов.Код ниже работает, если в любом каталоге нет пробелов.Как мне улучшить это для обработки каталогов с пробелами?

$workingDirectory = Split-Path -Parent $PSCommandPath
$sourceDir = "$workingDirectory\source folder"
$targetDir = "$workingDirectory\target folder"
$logFile = "$workingDirectory\log.txt"
$options = "/copyall /b /is /r:5 /w:5 /log:$logFile"
Start-Process robocopy -args "$sourceDir $targetDir $options" -NoNewWindow -PassThru -Wait

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Хорошо, я вижу ошибку при использовании Start-Process:

ERROR : Invalid Parameter #3 : "...\target"

Однако для запуска robocopy специальных цитат не требуется. Обратите внимание, что для / copyall требуются права администратора.

robocopy $sourcedir $targetdir /copyall /b /is /r:5 /w:5 /log:$logFile
1 голос
/ 15 мая 2019

Не зная конкретной ошибки, сложно сказать точно. Вы можете добавить экранированные кавычки вокруг $sourceDir и $targetDir, чтобы PowerShell не удалял кавычки при запуске нового процесса для выполнения robocopy.

Start-Process robocopy -args `"$sourceDir`", `"$targetDir`", $options -NoNewWindow -PassThru -Wait
0 голосов
/ 15 мая 2019

Основываясь на комментарии Ансгара Вичерса, я смог в этом разобраться. Спасибо: -)

$workingDirectory = Split-Path -parent $PSCommandPath
$SourceDir = "$workingDirectory\source folder"
$targetDir = "$workingDirectory\target folder"
$logFile = "$workingDirectory\log.txt"
$options = "/copyall /b /is /r:5 /w:5 /log:$logFile"
& robocopy "$sourceDir" "$targetDir" /copyall /b /is /r:5 /w:5 "/log:$logFile"
...