gpt4 book ai didi

Powershell 导航到特定目录

转载 作者:行者123 更新时间:2023-12-03 00:55:58 25 4
gpt4 key购买 nike

总 powershell noob 并试图进入一个目录。我知道这是最后一个目录(按字母顺序),我可以用Get-ChildItem -Directory | Select-Object -Last 1然后我想Set-Location对此,但我无法弄清楚如何使用上述输出来调用它。
我正在尝试类似的东西:

Get-ChildItem -Directory | Select-Object -Last 1

Set-Variable -Name "Dir" -Value { Get-ChildItem -Directory | Select-Object -Last 1 }

Set-Location -Path $Dir
但这根本行不通。任何指针?

最佳答案

评论里有很好的信息,我试着总结和补充一下:

  • { ... }script block PowerShell 中的文字:稍后使用 & 调用的可重用代码段, call operator ;也就是说,花括号内的内容不会立即执行。
  • 鉴于您希望执行并返回命令的输出作为另一个命令的参数,请使用 () , grouping operator [1]。
  • Set-Variable -Name Dir -Value (Get-ChildItem -Directory | Select-Object -Last 1)
    但是,很少需要使用 Set-Variable cmdlet,鉴于简单的分配 - $Dir = ...也可以工作,在这种情况下,您甚至不需要括号:
    $Dir = Get-ChildItem -Directory | Select-Object -Last 1
    当然,就像你可以通过 (...)表达到 Set-Variable ,您可以将其传递给 Set-Location 直接,在这种情况下,您根本不需要中间变量(参数 -Path 是位置隐含的):
    Set-Location (Get-ChildItem -Directory | Select-Object -Last 1)
    您可以通过直接索引 Get-ChildItem 使其更加简洁。调用的输出[2]; [-1]指的是最后一个数组元素(输出对象):
    Set-Location (Get-ChildItem -Directory)[-1]
    另一种方法是使用管道(参见 about_Pipelines ):
    Get-ChildItem -Directory | Select-Object -Last 1 | Set-Location
    请注意,如果当前目录中不存在子目录(意味着 Get-ChildItem -Directory 不产生任何输出),则最后 3 个命令之间存在细微差别:
  • Set-Location (Get-ChildItem -Directory | Select-Object -Last 1)将报告错误,因为您随后有效地传递了 $null-Path争论。
  • Set-Location (Get-ChildItem -Directory)[-1]也会报错,因为不能对$null应用索引值(value)。
  • Get-ChildItem -Directory | Select-Object -Last 1 | Set-Location相比之下,将是空操作,因为 Set-Location由于没有通过管道接收输入,实际上根本不会被调用。

  • 如果没有子目录是意外情况,您可以通过添加 -ErrorAction Stop 强制中止脚本。到前两个命令之一 - 见 about_CommonParameters .

    [1] 虽然 $(...) , subexpression operator , 也可以,通常没有必要 - 见 this answer .
    [2] 请注意,这样做意味着来自 Get-ChildItem 的所有输出然后首先在内存中收集调用,但在这种情况下这不太可能成为问题。见 this answer想要查询更多的信息。

    关于Powershell 导航到特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63614877/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com