有没有办法使用正则表达式设置路径?

时间:2019-06-17 09:12:56

标签: powershell

我正在使用PowerShell命令提示符,并且想要将位置设置为文件夹“文件夹”。问题是文件夹可以无处不在。

我已经尝试过命令Set-LocationResolve-Path,但我不明白。

我想做这样的事情:

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

.*可以是所有父文件夹的地方

有什么主意吗?

2 个答案:

答案 0 :(得分:2)

可以尝试一下:

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 :(得分:1)

需要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
}

cdSet-Location的别名,因此您可以随意使用。要记住的重要一点是使用FullName属性,因为它包含文件夹的完整路径。


*对于低于v3的PowerShell版本,请使用| Where-Object {$_.PSIsContainer -eq $true}代替-Directory