我正在尝试创建一个 powershell 脚本,该脚本查看给定目录下的所有文件和文件夹,然后将 .properties 文件中给定单词的所有实例更改为另一个给定单词的实例。
我在下面写的内容就是这样做的,但是我的版本控制注意到每个文件中的更改,无论它是否包含要更改的单词的实例。为了解决这个问题,我尝试在获取/设置内容之前检查文件中是否存在该单词(如下所示),但是它告诉我 [System.Object[]] 不包含名为“包含”的方法。我认为这意味着 $_ 是一个数组,所以我尝试创建一个循环来遍历它并一次检查每个文件,但它告诉我它无法索引到 System.IO.FileInfo 类型的对象。
谁能告诉我如何更改下面的代码来检查文件是否包含 wordToChange ,然后应用它所做的更改。
$directoryToTarget=$args[0]
$wordToFind=$args[1]
$wordToReplace=$args[2]
Clear-Content log.txt
Get-ChildItem -Path $directoryToTarget -Filter *.properties -Recurse | where { !$_.PSIsContainer } | % {
If((Get-Content $_.FullName).Contains($wordToFind))
{
Add-Content log.txt $_.FullName
(Get-Content $_.FullName) |
ForEach-Object { $_ -replace $wordToFind , $wordToReplace } |
Set-Content $_.FullName
}
}
谢谢你!
尝试这个:
$directoryToTarget=$args[0]
$wordToFind=$args[1]
$wordToReplace=$args[2]
Clear-Content log.txt
Get-ChildItem -Path $directoryToTarget -Filter *.properties -Recurse | where { !$_.PSIsContainer } | % {
$file = Get-Content $_.FullName
$containsWord = $file | %{$_ -match $wordToFind}
If($containsWord -contains $true)
{
Add-Content log.txt $_.FullName
($file) | ForEach-Object { $_ -replace $wordToFind , $wordToReplace } |
Set-Content $_.FullName
}
}
这会将文件的内容放入数组中$file
然后检查每一行的单词。每行结果 ($true
/$false
) 被放入一个数组中$containsWord
。然后检查数组以查看是否找到了该单词($True
存在变量);如果是这样那么if loop
is run.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)