在 ForEach 循环中运行程序

Posted

技术标签:

【中文标题】在 ForEach 循环中运行程序【英文标题】:Run a program in a ForEach loop 【发布时间】:2010-09-15 21:54:51 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

并且如果需要flags,可以在末尾加上; ls | % &"C:\Working\tools\custom-tool.exe" $_.FullName --flag --flag2=47 我发现了。它是ForEach-Object 的别名。您可以通过键入 get-alias 在 powershell 提示符下查看当前别名【参考方案2】:
ls | %C:\Working\tools\custom-tool.exe $_

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

Jeffrery Hicks 和 slipsec 都是正确的。取消双引号。

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

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

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

【讨论】:

以上是关于在 ForEach 循环中运行程序的主要内容,如果未能解决你的问题,请参考以下文章

php foreach怎样获取当前的循环次数

foreach 循环不会遍历列表中的所有项目 - C#

在 foreach 循环中运行 h2o 算法?

在 R doParallel foreach 循环中运行 ovun.sample

无法让 ForEach 循环在 SwiftUI 中使用嵌套的 JSON 数据运行 [关闭]

在 forEach 循环完成后运行回调函数