?добавлено в строку PowerShell - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь переименовать файл с помощью powershell

$oldPath="‪c:\users\guest\desktop\old.txt"
$newName="‪c:\users\guest\desktop\new.txt"
Rename-Item -Path $oldPath -NewName $newName -Force;

Я получаю следующую ошибку

Rename-Item : Cannot find drive. A drive with the name '‪C' does not exist.

при просмотре кода в Notepad ++ Я понимаю, что есть "?"добавлен перед обоими путями, которые не видны в powershell ise.

Путь, видимый в блокноте ++ "?c:\users\guest\desktop\old.txt"

Я не могу обрезать, используя $oldPath.TrimStart("?") также

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Конечно, вы всегда можете добавить небольшую функцию для удаления недопустимых символов имени файла в вашем коде, например:

function Remove-InvalidCharacters ([string]$fileName) {
    $invalid = [IO.Path]::GetInvalidPathChars() -join ''
    $pattern = "[{0}]" -f [RegEx]::Escape($invalid)
    return ($fileName -replace $pattern, '')
}

$oldPath = Remove-InvalidCharacters "‪c:\users\guest\desktop\old.txt"
$newName = Remove-InvalidCharacters "‪c:\users\guest\desktop\new.txt"
if (Test-Path $oldPath -PathType Leaf) {
    Rename-Item -Path $oldPath -NewName $newName -Force
}
else {
    Write-Warning "Path '$oldPath' not found"
}
0 голосов
/ 08 июня 2018

Я бы попытался очистить путь от специальных символов (поскольку вопросительный знак не виден в ISE, это может быть не вопросительный знак, а какой-то специальный символ).Вы можете сделать это так:

$oldPath = $oldPath -replace '[^\w\\:."]', ''
$newName = $newName -replace '[^\w\\:."]', ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...