Powershell 脚本打开位于子目录内的多个文件

Powershell 脚本打开位于子目录内的多个文件

如何打开(例如,使用 notepad.exe)多个以 _dc.txt 结尾的文件,每个文件位于 C:\Data\Test 的多个子目录中?

下面的脚本卡在-Recurse 上,出现错误“Invoke-Item:找不到与参数名称 Recurse 匹配的参数。”

# recursively go into dc1 subfolders and open _dc.txt files
Clear-Host
$Directory = "C:\Data\Test*"

Invoke-Item -Path $Directory -Recurse -Include *_dc.txt

答案1

-Recurse不是 PowerShell“通用参数”之一。因此,并非所有 cmdlet 都提供此功能。如果您需要-Recurse使用不支持此功能的 cmdlet 的功能,则需要从支持此功能的 cmdlet 中传输输出。

在这种情况下,您似乎还需要先通过过滤 cmdlet(如Where-Object)传递输出。我尝试使用-Includewith Invoke-Item,但无法让它按照您想要的方式运行。

例子:

Get-Childitem 'C:\Data\Test*' -Recurse | Where-Object {$_.Name -match "_dc.txt$"} | Invoke-Item

扩展并附有评论:

# Recursively search folders with names beginning 'C:\Data\Test' and return the objects found.
Get-ChildItem 'C:\Data\Test*' -Recurse |

# Filter objects to only those with names ending in `_dc.txt`.
Where-Object {$_.Name -match "_dc.txt$"} |

# Perform the default action (for .txt files, this is normally "Open with Notepad") on the objects.
Invoke-Item

打高尔夫球:

ls 'C:\Data\Test*' -R|?{$_.Name -match "_dc.txt$"}|ii
  • ls是内置别名Get-ChildItem
  • -Recurse可以被修剪为 just ,-R因为它是唯一一个名称以“R”开头的参数Get-ChildItem
  • ?是 的内置别名Where-Object
  • ii是 的内置别名Invoke-Item

相关内容