如何将文件列表作为参数传递给powershell脚本

Mic*_*ann 5 powershell

如何将文件列表作为参数传递给Powershell脚本?

param
(
    [String[]]$files
)

echo $files
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它

PS D:\> & '.\merge outputs.ps1' *.dat
Run Code Online (Sandbox Code Playgroud)

它打印

*.dat
Run Code Online (Sandbox Code Playgroud)

但我期待类似的东西

file1.dat
file2.dat
...
fileN.dat
Run Code Online (Sandbox Code Playgroud)

Mic*_*ens 10

这样提出的两个解决方案(尽管一个被接受并且都有赞成)并没有真正提供足够的解决方案 - 它们都会让你跳过箍.提出的问题表明,通过简单 *.dat地使用命令行,如何使底层代码像您期望的那样对待它.也就是说,如何使代码简单地做正确的事情.使用其他shell和其他cmdlet,您所做的就是*.dat,不是这样的:

foobar(fizzbuzz[--brobdingnag*!& '\''*.dat''`])
Run Code Online (Sandbox Code Playgroud)

(好吧,我夸大了说明一点:-)但是有一种简单的方法可以做正确的事情 - 检查是否使用了通配符然后只需展开它们:

param
(
    [String[]]$files
)
$IsWP = [System.Management.Automation.WildcardPattern]::ContainsWildcardCharacters($files)
if($IsWP) { 
    $files = Get-ChildItem $files | % { $_.Name }
}
echo $files
Run Code Online (Sandbox Code Playgroud)