gpt4 book ai didi

windows - 从 Get-ChildItem -Path 返回对象数组

转载 作者:行者123 更新时间:2023-12-05 00:47:41 24 4
gpt4 key购买 nike

在 powershell 中,ls -R *.txt 将按目录递归地列出文件,或者,甚至更好:

PS> Get-ChildItem -Path C:\Test -Name

日志

anotherfile.txt
Command.txt
CreateTestFile.ps1
ReadOnlyFile.txt

但是我如何将它输入到数组中呢?我想要一个文件(?)对象本身的数组,查看:

Get-ChildItem "C:\WINDOWS\System32"*.txt -Recurse |选择对象全名

https://stackoverflow.com/a/24468733/262852

我正在从这些类型的命令中寻找带有 powershell 的"file"对象数组。

可能更好的语法:

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

但不是复制项目,我只想要一个对象,或者更确切地说,对象数组。不是文件的路径,不是文件,而是可能是 powershell 引用或指向文件的指针。

(现在阅读 fine 手册。)

最佳答案

tl;dr

  • 当您在变量中捕获 PowerShell 语句的输出时(例如,
    $output = Get-ChildItem ...),它是自动 如果有两个或更多输出对象,则收集在一个数组中。

  • 为了确保数组总是被使用——即使只有一个单个没有输出对象——使用 @(...)(例如,
    $output = @(Get-ChildItem ...))


  • PowerShell cmdlet,例如 Get-ChildItem,可以输出任意数量的对象。

    • Get-ChildItem 输出 [System.IO.FileInfo] 和/或 [System.IO.DirectoryInfo] 对象,取决于是否正在输出有关文件和/或目录的信息。

    • 确定给定 cmdlet 的输出对象类型:

      • 运行,例如,(Get-Command Get-ChildItem).OutputType
      • 如果这不起作用,或者要查看特定调用的输出类型,请使用
        获取子项 |获取成员(member)
      • Get-Help -Full Get-ChildItem 也应该显示 OUTPUTS 部分,online help 也是如此,尽管在 Get-ChildItem 的情况下它不太具体,因为 Get-ChildItem 也适用于文件系统以外的提供程序。
  • 输出到管道时,每个输出对象单独传递给管道中的下一个命令,通常是立即处理.

  • 当在变量 ($var = ...)中捕获输出时,以下逻辑适用:

    • 如果输出两个或更多个对象,它们将被收集在一个常规的 PowerShell 数组中,该数组的类型为 [object[]](即使实际元素具有特定类型)。
    • 如果输出一个对象,则按原样输出;也就是说,它没有包裹在一个数组中。
    • 如果输出 no 对象,则输出“数组值 null”(有时称为“AutomationNull”,因为它的类型名称),它在表达式上下文中的行为类似于 $null 和枚举上下文中,如 空集合;它导致没有可见的输出 - 见 this answer了解详情。

因此,当在变量中捕获时,给定命令可能按情况返回:

  • 对象数组
  • 单个对象
  • “无”([System.Management.Automation.Internal.AutomationNull]::Value)

为确保给定命令的输出始终被视为数组,您有两种选择:

  • 使用 @(...)array subexpression operator ;例如

    • $fileSystemObjects = @(Get-ChildItem -Recurse -Filter *.txt)
  • 使用 [array] 对目标变量进行类型约束(相当于 [object[]],并且比 [object[]] 更易于键入)。

    • [array] $fileSystemObjects = Get-ChildItem -Recurse -Filter *.txt

也就是说,在 PSv3+ 中,您通常不必担心给定变量是包含标量(单个值)还是数组,因为标量可以隐式地被视为数组:您甚至可以在标量上调用 .Count,并使用索引 ([0], [-1]) - 参见 this answer了解详情。

关于windows - 从 Get-ChildItem -Path 返回对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765010/

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