Thu*_*fir 4 windows directory powershell system-administration file
从 powershell 中,ls -R *.txt将按目录递归列出文件,或者更好:
PS> Get-ChildItem -Path C:\Test -Name
Run Code Online (Sandbox Code Playgroud)
日志
PS> Get-ChildItem -Path C:\Test -Name
Run Code Online (Sandbox Code Playgroud)
但我如何将其输入数组?我想要一个文件(?)对象本身的数组,查看:
Get-ChildItem "C:\WINDOWS\System32" *.txt -Recurse | Select-Object FullName
我正在从这些类型的命令中寻找带有 powershell 的“文件”对象数组。
可能更好的语法:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
但我不需要复制这些项目,而是想要一个对象,或者更确切地说,对象数组。不是文件的路径,也不是文件,大概是 powershell 引用或指向文件的指针。
(现在阅读精美的手册。)
太长了;博士
当您在变量(例如$output = Get-ChildItem ...)中捕获 PowerShell 语句的输出时,如果有两个或多个输出对象,它会自动收集在数组中。
为了确保始终使用数组- 即使只有一个或没有输出对象 - 使用@(...)(例如,$output = @(Get-ChildItem ...))
PowerShell cmdlet(例如Get-ChildItem)可以输出任意数量的对象。
Get-ChildItem输出[System.IO.FileInfo]和/或[System.IO.DirectoryInfo]对象,具体取决于是否输出有关文件和/或目录的信息。
要确定给定 cmdlet 的输出对象类型:
(Get-Command Get-ChildItem).OutputTypeGet-ChildItem | Get-Member。Get-Help -Full Get-ChildItem也应该显示一个部分,就像在线帮助OUTPUTS一样,尽管不是在不太具体的情况下,因为也可以与文件系统以外的提供程序一起使用。Get-ChildItemGet-ChildItem当输出到管道时,每个输出对象都会单独传递到管道中的下一个命令,以便通常立即处理。
当在变量( )中捕获输出$var = ...时,将应用以下逻辑:
[object[]](即使实际元素具有特定类型)。$null在枚举上下文中,其行为类似于空集合;它导致没有可见的输出 - 有关详细信息,请参阅此答案。因此,当在变量中捕获时,给定的命令可能会返回:
[System.Management.Automation.Internal.AutomationNull]::Value)为了确保给定命令的输出始终被视为数组,您有两个选择:
使用@(...),数组子表达式运算符;例如
$fileSystemObjects = @(Get-ChildItem -Recurse -Filter *.txt)[array]使用(相当于,并且比 更容易键入)对目标变量进行类型约束[object[]]。
[array] $fileSystemObjects = Get-ChildItem -Recurse -Filter *.txt也就是说,在 PSv3+ 中,您通常不需要担心给定变量是否包含标量(单值)或数组,因为标量可以隐式地像数组一样对待:您.Count甚至可以在标量上调用,并使用索引([0],[-1]) - 请参阅这个答案的详细信息。
| 归档时间: |
|
| 查看次数: |
7738 次 |
| 最近记录: |