【发布时间】:2018-02-20 15:23:36
【问题描述】:
我有这个代码sn-p,我尝试在一个目录的所有文件中替换一些字符串。我以为我可以将 foreach 嵌套在 ForEach-Object 中,但这似乎不起作用。
我得到的错误是:
InvalidArgument: (:) [ForEach-Object], ParameterBindingException
$files = Get-ChildItem $testdir\reference *.* -recurse
$replacementMap = @{"Fruit::Apple" = "NewApple";"Fruit::Banana" = "NewBanana"}
foreach ($file in $files)
{
If (Get-Content $($file.FullName) | Select-String -Pattern "Fruit::")
{
$content = Get-Content $($file.FullName) | ForEach-Object
{
$line = $_
foreach ($entry in $replacementMap.GetEnumerator())
{
$line -replace $($entry.Name),$($entry.Value)
}
}
$content = $content -join "`r`n"
$content | Set-Content $($file.FullName)
}
此代码在没有
的情况下工作foreach ($entry in $replacementMap.GetEnumerator())
{
$line -replace $($entry.Name),$($entry.Value)
}
部分。任何人都知道我做错了什么?提前致谢
【问题讨论】:
-
ForEach-Objectcmdlet 和foreach(){}循环是两种不同的语句。但是,您的问题似乎是ForEach-Object和{之间的换行符 - 将{向上移动到同一行
标签: powershell foreach nested