Есть ли способ установить путь с помощью регулярного выражения? - PullRequest
0 голосов
/ 17 июня 2019

Я использую командную строку PowerShell и хочу указать местоположение для папки «Папка». Дело в том, что папка может быть везде.

Я пробовал команду Set-Location и Resolve-Path, но я не понимаю.

Я хочу сделать что-то подобное:

$path = Resolve-Path ".*/Folder"
Set-Location $path

Где .* может быть родительской папкой

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Попробовал бы это:

Get-ChildItem -Path .\ -Name Folder -Recurse -Depth 10

Надеюсь, это поможет. BR

Редактировать (см. Комментарии):

$array = Get-ChildItem -Path .\ -Name Ping -Recurse -Depth 10
if($array.Count -eq 0){
    #stay
}
if($array.Count -eq 1){
    Set-Location $array
}
else{
    $array | ForEach-Object{Write-Host $_}
}
1 голос
/ 17 июня 2019

Требуется PowerShell v3 или выше, вы можете проверить, используя $PSVersionTable. *


$path = (Get-ChildItem . -Recurse -Directory | Where-Object { $_.Name -eq "Folder" }).FullName

Это даст вам все каталоги с именем Folder в текущем каталогеи его подкаталоги рекурсивно.

Однако запрос может возвращать несколько результатов, поэтому, если вы хотите выбрать первое, используйте [0].Кроме того, чтобы охватить случай, когда запрос не возвращает результатов, принудительно установите возвращаемый объект как массив, используя @( ... ) и проверьте, существует ли он:

$f = @(Get-ChildItem . -Recurse -Directory | Where-Object { $_.Name -eq "Folder" })[0].FullName

if ( $f ) {
  cd $f
}
else {
  # Handle the error
}

cd является псевдонимом Set-Location, так что выможете использовать то, что вы предпочитаете.Важно помнить, что следует использовать свойство FullName, поскольку оно содержит полный путь к папке.


* Для версий PowerShell ниже v3 используйте | Where-Object {$_.PSIsContainer -eq $true} вместо -Directory

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