我正在使用PowerShell命令提示符,并且想要将位置设置为文件夹“文件夹”。问题是文件夹可以无处不在。
我已经尝试过命令Set-Location
和Resolve-Path
,但我不明白。
我想做这样的事情:
$path = Resolve-Path ".*/Folder"
Set-Location $path
.*
可以是所有父文件夹的地方
有什么主意吗?
答案 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
}
cd
是Set-Location
的别名,因此您可以随意使用。要记住的重要一点是使用FullName
属性,因为它包含文件夹的完整路径。
*对于低于v3的PowerShell版本,请使用| Where-Object {$_.PSIsContainer -eq $true}
代替-Directory