запись двойных кавычек в текст имени файла с powershell - PullRequest
0 голосов
/ 03 октября 2018

Мне было очень трудно увидеть, где я ошибся, добавив двойные кавычки к тексту имени файла.Следующий код прекрасно работает под зонтиком -whatif, но не без него.

$a = "20`" board"
get-childitem | rename-item -newname {$_.fullname -replace "20 board", $a } -whatif

get-childitem | rename-item -newname {$_.fullname -replace "20 board","20`" board" } -whatif

Желаемый результат - заменить 20 board на 20" board.Вышеуказанные фрагменты дают мне ошибку rename-item : Illegal characters in path..

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Полезный ответ ArcSet содержит критический указатель: " символы не могут использоваться в именах файлов и папок в Windows.

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

'hi' > "20`“ board" # works, because “ is not a regular double quote

- это Символ Unicode U+201C, ЛЕВОЙ ДВОЙНОЙMARK QUOTATION MARK .

Обратите внимание, что PowerShell обрабатывает обычные двойные кавычки и как взаимозаменяемые, поэтому вам все еще нужно ` -escape внутри обычной строки в двойных кавычках.

0 голосов
/ 03 октября 2018

В Windows вы не можете использовать определенные символы в имени файла или папки;двойная кавычка - одна из них.

Подробнее на https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file.

Выдержка из этой страницы:

The following reserved characters [are not allowed]:

< (less than)
(greater than)

: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
...