我是PowerShell的新手。我正在调用我创建的函数,它将我的两个参数分成几个。如何使计算出的参数在传递之前实际计算出来?
dir -Recurse -Path $source | foreach {MoveFile $_.FullName ($destination + "\" + $_.Extension.Substring(1, ($_.Extension.Length - 1))) }
这是这一部分:
($destination + "\" + $_.Extension.Substring(1, ($_.Extension.Length - 1))
那有问题。它将它分开而不是计算它。我做错了什么?
答案 0 :(得分:1)
通过将参数表达式放在parens中,您正在正确地执行此操作。当我在我的机器上使用带有Copy-Item的代码片段时,它工作得很好。您可能需要显示MoveFile函数的外观。可能是在你的情况下$ _。扩展正在评估为$ null。您似乎没有筛选具有扩展名的文件。
BTW,使用内置的Move-Item,您可以将其简化为:
dir $source -r *.* | Move-Item -Dest {"$destination\$($_.Extension.Substring(1))"}
有String.Substring
的重载只接受起始索引,并为您提供从该点到结尾的其余字符串。因此,您不必指定字符串其余部分的长度。