在foreach中运行程序

时间:2008-10-08 01:12:34

标签: powershell

我正试图让这个简单的Powershell脚本工作,但我觉得有些根本错误; - )

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

我基本上想要在目录中获取文件并将它们作为参数逐个传递给自定义工具。

4 个答案:

答案 0 :(得分:44)

如果您仍需要命令路径周围的引号(例如,如果您有空格),请按以下方式执行:

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

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

答案 1 :(得分:33)

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

当每个对象进入管道时,工具将对其进行运行。在命令字符串周围加上引号会使它成为一个刺痛!然后局部变量“$ _”它可能不知道如何处理错误。

答案 2 :(得分:6)

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

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

答案 3 :(得分:2)

Jeffrery Hicks和slipsec都是正确的。扣掉双引号。

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

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

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