Powershell-作为参数连接到外部程序

Powershell-作为参数连接到外部程序,powershell,Powershell,我正在尝试使用Powershell并尝试替换旧的控制台“for”命令。例如,要使用路径上的“FLAC.EXE”对*.WAV文件的文件夹进行编码: (Get-ChildItem)|Where-Object{$_.extension -eq ".wav"}|flac "$_.Name" 但是,我得到的结果是Flac显然没有接收文件名,而只接收文本字符串“$\uux.name” 我确信这是一个非常明显的问题,但我仍在这个阶段摸索着前进。试着这样做: Get-ChildItem *.wav | For

我正在尝试使用Powershell并尝试替换旧的控制台“for”命令。例如,要使用路径上的“FLAC.EXE”对*.WAV文件的文件夹进行编码:

(Get-ChildItem)|Where-Object{$_.extension -eq ".wav"}|flac "$_.Name"
但是,我得到的结果是Flac显然没有接收文件名,而只接收文本字符串“$\uux.name”

我确信这是一个非常明显的问题,但我仍在这个阶段摸索着前进。

试着这样做:

Get-ChildItem *.wav | Foreach-Object {flac $_.FullName}

自动变量
$\uu
通常仅在作为管道一部分的脚本块的上下文中有效,例如
{…}

非常好!我才刚刚开始学习PS。然而,似乎在脚本和即时使用之间存在着明显的二元性。对于以脚本形式输入的多步骤流程,您将使用常规的、模糊的VB控制结构,如For/foreach/if/elsif等。但是,如果您在即时执行提示下工作,您将使用与这些结构类似的适当“cmdlet”,如“foreach Object”。不是很直观,但我认为MS合理化这些执行模式是一种合理的方法。首先也是最重要的一点,我认为我需要学习最有用的“cmdlet”。@Gemman,我看不到二分法。就我个人而言,我尽量使用管道,因为这看起来更自然。我在脚本中使用Foreach对象。Foreach对象的主体可以分布在多行代码中。我希望控制台是一个多行脚本环境。这样,您就可以在多行上自然地输入“变量”、“if”和“for”,然后在完成控制返回或某些此类组合时执行。相比之下,cmdlet模型似乎非常。。。难以理解的——至少对习惯于C++或VB的人来说。至少一开始是这样。看看GitHub上的PSReadLine。它不仅改进了基本的控制台行编辑功能,而且提供了良好的多行编辑功能。