2008-10-08 24 views
24

我试图让这个简单的PowerShell脚本工作,但我认为有些东西是根本错误的;-)在foreach运行程序

ls | foreach { "C:\Working\tools\custom-tool.exe" $_ } 

我基本上是想获得目录中的文件,并通过他们一个由一个作为自定义工具的参数。

回答

31
ls | %{C:\Working\tools\custom-tool.exe $_} 

由于每个对象都沿着流水线向下运行,所以该工具将对其运行。围绕命令字符串引用引起它是一个刺痛!局部变量“$ _”它可能不知道如何处理这样的错误。

6

我打赌你的工具需要完整的路径。 $ _是每个通过管道的文件对象。您可能需要使用一个表达式是这样的:

ls | %{C:\Working\tools\custom-tool.exe $_.fullname} 
40

如果您仍需要各地的命令路径引号(比方说,如果你有空格),只是做这样的:

ls | % { &"C:\Working\tools\custom-tool.exe" $_.FullName } 

请注意,在字符串之前使用&以强制PowerShell将其解释为命令而不是字符串。

+0

而且如果需要的标志,就可以结束后添加; `ls | %{&“C:\ Working \ tools \ custom-tool.exe”$ _。FullName --flag --flag2 = 47}` – 2012-12-16 08:15:24

2

Jeffrery Hicks和slipsec都是正确的。关闭双引号。

$ _或$ _。fullname在我的测试脚本(如下)中工作。 YMMV与您的定制工具。

gci | % { c:\windows\notepad.exe $_.fullname } 

gci | % { c:\windows\notepad.exe $_ }