Poweshell -LiteralPath с подстановочным знаком - PullRequest
1 голос
/ 16 марта 2020

Поскольку мое имя файла содержит квадратные скобки, мне придется использовать -LiteralPath, однако, из-за этого я потерял возможность использовать подстановочный знак (для включения любого расширения файла) в своем коде:

$files = Get-ChildItem -Recurse -LiteralPath "$somepath"
foreach ($f in $files){
    Test-Path -LiteralPath "$somepath\$($f.BaseName).*" -PathType Leaf
}

один из файлов - file1 [123].txt, и тест не пройден. Есть ли обходной путь для этого? enter image description here

Как предложил Васиф: enter image description here enter image description here

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Попробуйте следующее.

Test-Path 'file1 ``[123].*'
foreach ($f in $files){
    $path = "$somepath\$($f.BaseName).*".Replace('[', '``[')
    Test-Path -Path $path -PathType Leaf
}
0 голосов
/ 16 марта 2020

Вы просто близки, просто поместите часть шаблона в параметр -Filter и удалите -PathType

$files = Get-ChildItem -Recurse -LiteralPath "$somepath"
foreach ($f in $files){
    Test-Path -LiteralPath "$somepath" -Filter "$($_.BaseName).*"
}

Но вы можете использовать -Path так:

-Path `"$somepath\$($_.basename).*`"
0 голосов
/ 16 марта 2020

Вместо использования "$ somepath \ $ ($ f.BaseName). *" Вы можете напрямую использовать полный путь к объекту файловой системы из самой переменной $ files, т.е. $ files.FullName Я надеюсь, что следующий код работает для вас:)

$files = Get-ChildItem -Recurse -LiteralPath "$somepath"
$files | ForEach-Object {Test-Path -LiteralPath $_.FullName -PathType Leaf}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...