#powershell
#powershell
Вопрос:
Я пытаюсь выполнить Copy-Item
для ряда файлов и замечаю, что файлы, содержащие [
и ]
, которые не копируются, однако я не получаю никакой ошибки.
Я использую следующую функцию:
function fsync ($source,$target) {
$sourceFiles = @(Get-ChildItem -Path $source -Recurse | select -expand FullName)
foreach ($f in $sourceFiles) {
$destFile = $f.Replace($source,$target)
$exist = Test-Path $destFile
if ($exist -eq $false) {
Write-Host "Copying: " $f "to: " $destFile
Copy-Item -Path "$f" -Destination "$destFile"
} else {
Write-Host "File: " $f "Already exists"
}
}
}
При каждом запуске он будет печатать Copying: C:Usersjesse_btmpfoo[1].txt to: C:Usersjesse_btmptestfoo[1].txt
и не отображать ошибку, но файл фактически никогда не копируется.
Я пробовал заключать имена переменных в двойные кавычки, но это ничего не изменило.
Когда я вручную копирую файлы с помощью [
и ]
в них на терминале, это работает до тех пор, пока эти символы экранируются. Есть ли что-то, что я должен сделать, чтобы мои переменные обрабатывались как литеральные строки?
Комментарии:
1. Передайте полный объект в copy item вместо расширения свойства full name
2. @DougMaurer: По-прежнему не работает
Ответ №1:
Странно, что это работает таким образом, но я видел похожие результаты на собственном опыте.
Используйте -LiteralPath:
Copy-Item -LiteralPath $f.fullname -Destination "$destFile"
Комментарии:
1. На самом деле не так уж и странно,
-Path
допускает подстановочные знаки , хотя-LiteralPath
это uh… литерал ( Copy-Item ).