Powershell导航到特定目录
Total powershell noob正在尝试进入目录。我知道这是最后一个目录(按字母顺序),我可以用Powershell导航到特定目录,powershell,Powershell,Total powershell noob正在尝试进入目录。我知道这是最后一个目录(按字母顺序),我可以用 获取子项-目录|选择对象-最后1个 然后我想将Location设置为该值,但我不知道如何使用上面的输出调用它 我试着说: Get-ChildItem -Directory | Select-Object -Last 1 Set-Variable -Name "Dir" -Value { Get-ChildItem -Directory | Select-Object
获取子项-目录|选择对象-最后1个
然后我想将Location
设置为该值,但我不知道如何使用上面的输出调用它
我试着说:
Get-ChildItem -Directory | Select-Object -Last 1
Set-Variable -Name "Dir" -Value { Get-ChildItem -Directory | Select-Object -Last 1 }
Set-Location -Path $Dir
但这根本不起作用。有什么建议吗?评论中有很好的信息,让我试着总结和补充一下:
是PowerShell中的一个文本:一段可重用的代码,稍后将通过{…}
调用;也就是说,花括号内的内容不会立即执行&
- 如果希望执行并将命令的输出作为另一个命令的参数返回,请使用
,[1]()
$Dir=…
也可以工作,在这种情况下,您甚至不需要括号:
$Dir = Get-ChildItem -Directory | Select-Object -Last 1
当然,就像您可以将(…)
表达式传递给设置变量一样,您也可以将其直接传递给,在这种情况下,您根本不需要中间变量(参数-Path
是位置隐含的):
通过直接为getchilditem
call的输出建立索引[2],可以使这一点更加简洁<代码>[-1]
表示最后一个数组元素(输出对象):
另一种方法是使用管道(参见):
请注意,如果当前目录中不存在子目录,则最后3个命令之间存在细微差别(这意味着Get ChildItem-directory
不产生任何输出):
将报告一个错误,因为您将Set Location(Get ChildItem-Directory | Select Object-Last 1)
有效地作为$null
参数传递-Path
也会报告错误,因为您无法将索引应用于Set Location(Get ChildItem-Directory)[-1]
值$null
- 相比之下,
,将是一个不可操作的选项,因为Get ChildItem-Directory | Select Object-Last 1 | Set Location
由于没有通过管道接收输入,实际上根本不会被调用Set Location
-ErrorAction Stop
添加到前两个命令之一来强制脚本中止-请参阅
[1] 虽然,
$(…)
也可以工作,但通常不需要它-请参阅
[2] 请注意,这样做意味着来自Get ChildItem
调用的所有输出将首先收集到内存中,但在这种情况下,这不太可能是一个问题。有关更多信息,请参阅。评论中有很多好的信息,让我试着总结和补充它们:
是PowerShell中的一个文本:一段可重用的代码,稍后将通过{…}
调用;也就是说,花括号内的内容不会立即执行&
- 如果希望执行并将命令的输出作为另一个命令的参数返回,请使用
,[1]()
$Dir=…
也可以工作,在这种情况下,您甚至不需要括号:
$Dir = Get-ChildItem -Directory | Select-Object -Last 1
当然,就像您可以将(…)
表达式传递给设置变量一样,您也可以将其直接传递给,在这种情况下,您根本不需要中间变量(参数-Path
是位置隐含的):
通过直接为getchilditem
call的输出建立索引[2],可以使这一点更加简洁<代码>[-1]
表示最后一个数组元素(输出对象):
另一种方法是使用管道(参见):
请注意,如果当前目录中不存在子目录,则最后3个命令之间存在细微差别(这意味着Get ChildItem-directory
不产生任何输出):
将报告一个错误,因为您将Set Location(Get ChildItem-Directory | Select Object-Last 1)
有效地作为$null
参数传递-Path
也会报告错误,因为您无法将索引应用于Set Location(Get ChildItem-Directory)[-1]
值$null
- 相比之下,
,将是一个不可操作的选项,因为Get ChildItem-Directory | Select Object-Last 1 | Set Location
由于没有通过管道接收输入,实际上根本不会被调用Set Location
-ErrorAction Stop
添加到前两个命令之一来强制脚本中止-请参阅
[1] 虽然,
$(…)
也可以工作,但通常不需要它-请参阅
[2] 请注意,这样做意味着来自
Get ChildItem
调用的所有输出将首先收集到内存中,但在这种情况下,这不太可能是一个问题。有关更多信息,请参阅。使用管道有什么问题Get ChildItem-Directory | Select Object-Last 1 | Set Location
或更好的Get ChildItem-Directory | Select Object-Last 1 | Push Location
我同意@Olaf使用管道,但我想我应该提到Set变量-Name“Dir”-Value$(Get ChildItem-Directory | Select Object-Last 1)
将在您的示例中起作用。按照这种方式,实际上是将实际脚本块保存到变量中,而不是运行Get ChildItem
的结果。仅供参考,可以调用和使用脚本块Set Location-Path$($Dir.Invoke())<
Set-Location (Get-ChildItem -Directory | Select-Object -Last 1)
Set-Location (Get-ChildItem -Directory)[-1]
Get-ChildItem -Directory | Select-Object -Last 1 | Set-Location