2013-05-29 4 views
5

Как передать список файлов в качестве параметров сценария Powershell?Как передать список файлов в качестве параметров сценарию powershell

param 
(
    [String[]]$files 
) 

echo $files 

Когда я пытаюсь запустить его

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

печатает

*.dat 

, но я ожидал что-то подобное

file1.dat 
file2.dat 
... 
fileN.dat 
+0

Собираетесь ли вы обрабатывать файлы один за другим? –

+0

Нет, я объединю их всех вместе. –

ответ

8

Два решения, представленные thusfar (даже хотя один из них принят, и оба имеют upvotes) на самом деле не обеспечивают адекватного решения вопроса - они оба заставляют вас прыгать через обручи. Вопрос поставил вопрос о том, что по просто помещал*.dat на линию связи, как можно сделать базовый код лечить его , как вы ожидали бы. То есть, как сделать код , просто поступайте правильно. С другими оболочками и другими командлетами, вы все этим *.dat, не нравится:

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

(КИ, я преувеличиваю, чтобы сделать точку :-) Но есть простой способ просто сделать право thing-- проверьте, используются ли подстановочные знаки, а затем просто развернуть их:

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

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

Вы можете либо передать полное имя файла в виде строки

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

Или вы можете принять FileSystemInfo параметров в сценарии

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

Write-Host $files 

И позвони:

& '.\merge outputs' -files (dir *.dat) 
Смежные вопросы