Poweshell: не использовать открытую квадратную скобку с помощью .Replace не работает - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь убрать квадратную скобку в имени файла, избегая его для проверки существования файла (включая подпапки), но это не работает.

Get-ChildItem -Path "D:\somepath" -Directory | Where-Object { (Get-ChildItem -Path $_.FullName -File).Name -like "somestring [somenumber].*".Replace('[', '``[')}

Однако, это работает (не включает подпапку ):

Test-Path -Path "D:\somepath\subfolder\somestring [somenumber].*".Replace('[', '``[') -PathType Leaf

и это тоже работает (жестко):

Get-ChildItem -Path "D:\somepath" -Directory | Where-Object { (Get-ChildItem -Path $_.FullName -File).Name -like "somestring ``[somenumber].*"}

Есть идеи, почему это так? Заранее спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Если вы не используете двойные кавычки, обратная цитата будет воспринята буквально. У вас слишком много обратных цитат. Проверьте, что вы делаете по частям, и убедитесь, что это работает.

'['.replace('[','`[') 
`[

'['.replace('[','``[')                                                                                                       
``[

Это работает для меня, заключая в квадратные скобки открытую квадратную скобку.

get-childitem | where name -like '*`[*'
get-childitem | where name -like 'file `[1].*'
get-childitem | where name -match 'file \[1]'

Это малоизвестно, но похоже можно использовать квадратные скобки в качестве подстановочного знака:

get-childitem | where name -like '[a-f]*'

Эти имена файлов являются проблемой в powershell. Я бы переименовал их. У вас будут проблемы с созданием такого же имени в powershell.

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