0

我是PowerShell的新手。我正在调用我创建的一个函数,它将我的两个参数分成了几个。如何使计算的参数在传递之前实际计算?

dir -Recurse -Path $source | foreach {MoveFile $_.FullName ($destination + "\" + $_.Extension.Substring(1, ($_.Extension.Length - 1))) }

就是这部分:

($destination + "\" + $_.Extension.Substring(1, ($_.Extension.Length - 1))

那有问题。它分离它而不是计算它。我究竟做错了什么?

4

1 回答 1

1

通过将参数表达式放在括号中,您可以正确地做到这一点。当我在我的机器上使用该片段和 Copy-Item 时,它工作得很好。您可能需要展示您的 MoveFile 函数的外观。在您的情况下,可能是 $_.Extension 正在评估为 $null。您似乎没有过滤具有扩展名的文件。

顺便说一句,使用内置的 Move-Item 您可以将其简化为:

dir $source -r *.* | Move-Item -Dest {"$destination\$($_.Extension.Substring(1))"}

有一个重载String.Substring只需要开始索引,并为您提供从该点到结束的其余字符串。因此,您不必指定字符串其余部分的长度。

于 2012-11-29T18:13:46.543 回答