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

时间:2013-05-29 09:51:30

标签: powershell

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

param
(
    [String[]]$files
)

echo $files

当我尝试运行它时

PS D:\> & '.\merge outputs.ps1' *.dat

打印

*.dat

但我期望类似于

file1.dat
file2.dat
...
fileN.dat

3 个答案:

答案 0 :(得分:10)

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

foobar(fizzbuzz[--brobdingnag*!& '\''*.dat''`])

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

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

答案 1 :(得分:3)

$files = dir *.dat | foreach {$_.fullname}

& '.\merge outputs.ps1' -files $files

答案 2 :(得分:3)

您可以将完整文件名作为字符串

传递
& '.\merge outputs' -files (dir *.dat | %{ $_.FullName })

或者您可以在脚本中接受FileSystemInfo参数

param
(
    [System.IO.FileSystemInfo[]]$files
)

Write-Host $files

并致电:

& '.\merge outputs' -files (dir *.dat)