Замена специальных символов в именах файлов в Windows PowerShell - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь переместить кучу файлов из каталога Windows в общую папку, мне нужно переименовать имена файлов и каталогов, которые не разрешены в целевой файловой системе.

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

Get-ChildItem -Filter "*`#*" -Recurse |
Rename-Item -NewName {$_.name -replace '#','No.' } -Verbose

Решение, предоставленное evilSnobu, сработало как прелесть для этих символов ~, #,%, &

Другие символы, не разрешенные на sharepoint, предположительно: +, *, {,}, \,:, <,>,?, /, |, «

Я не уверен точно, какиеВо-первых, они разрешены в исходной файловой системе Windows, но "+" - это, и, очевидно, многие имена файлов содержат этот символ.

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

Get-ChildItem -Filter "*`+*" -Recurse |
>> Rename-Item -NewName {$_.name -replace '+','_' } -Verbose

К сожалению, это не работает.Есть идеи, как с этим бороться?

Спасибо, Тим

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Мой текущий способ очистки имен / путей к файлам заключается в следующем:

$Path.Split([IO.Path]::GetInvalidFileNameChars()) -join '_'

При этом используется функция .NET для недопустимых символов текущей ОС (поскольку теперь .NET работает не только на Windows).Любые недопустимые символы будут заменены на _.

0 голосов
/ 10 мая 2018

Из списка, в котором вы не уверены, все они запрещены , за исключением +, {, }.Чтобы экранировать символы в регулярных выражениях, используйте \, например, поскольку $ является регулярным выражением привязки конца строки, используйте \$, чтобы соответствовать литералу $.В качестве альтернативы вместо $name -replace '+','_' вы можете рассмотреть $name.replace("+","_"), который не использует регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...