29

我试图让这个简单的 PowerShell 脚本正常工作,但我认为从根本上来说是错误的。;-)

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

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

4

4 回答 4

45

如果您仍然需要命令路径周围的引号(例如,如果您有空格),请这样做:

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

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

于 2008-10-08T12:44:23.947 回答
36
ls | %{C:\Working\tools\custom-tool.exe $_}

随着每个对象从管道中下来,该工具将针对它运行。在命令字符串周围加上引号会导致它成为......一个字符串!局部变量“$_”可能不知道如何处理,因此会出现错误。

于 2008-10-08T01:26:05.657 回答
6

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

ls | %{C:\Working\tools\custom-tool.exe $_.fullname}
于 2008-10-08T11:03:20.047 回答
2

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

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

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

或者

gci | % { c:\windows\notepad.exe $_ }
于 2008-10-09T17:13:56.147 回答