Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell导航到特定目录_Powershell - Fatal编程技术网

Powershell导航到特定目录

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

Total powershell noob正在尝试进入目录。我知道这是最后一个目录(按字母顺序),我可以用

获取子项-目录|选择对象-最后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]

但是,很少需要使用cmdlet,因为简单的赋值-
$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]

但是,很少需要使用cmdlet,因为简单的赋值-
$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