如何打开(例如,使用 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
)传递输出。我尝试使用-Include
with 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
。