使用 PowerShell 进行 INI 编辑



我的问题是我想更改保存在文件夹及其子文件夹中的INI文件中的路径。

文件夹的路径为C:NewPath

示例 INI 文件:

notAIniText = C:\A\PathotAIniText maybeAIniText = C:\A\Path\maybeAIniText AIniText = C:\A\Path\AIniText

我阅读了一些关于 PSini 的其他问题,但我不想只 id,因为我想在多台 PC 上使用脚本,而且我不想每次都安装 PSIni。

我试过了:

$mabyIni = "C:NewPath"
$AiniFile = Get-ChildItem - Path "C:NewPath*" -Include *.ini -Recurse
foreach ($file in $AiniFile) {
Select-String -Path $file -AllMatches "C:APath" | ForEach-Opject {
$file -replace [regex]:Escape('C:APath'), ('$mabyIni')
} | Set-Content $mabyIni -Include *.ini

但这行不通。我也用Get-Content试过,但这也不起作用。

没有PSini有什么办法吗?

您注释中的代码很接近,但只是有一些语法问题。它开始很强大:

$mabyIni = "C:NewPath" 
$AiniFile = Get-ChildItem - Path "C:NewPath*" -include *.ini -recurse 
ForEach($file in $AiniFile) { 

目前为止,一切都好。定义新路径,并在旧路径中获取.ini文件的列表,然后开始遍历这些文件。到目前为止,这都是很好的代码。然后事情开始误入歧途。

我看到您正在尝试获取每个.ini文件的内容,替换有问题的字符串,然后将该文件输出到新路径:

(Get-Content $AiniFile.PSPath) | ForEach-Object {
$file -replace [regex]:Escape('C:APath'),('$mabyIni') 
}| Set-Content $mabyIni -include *.ini

不幸的是,您使用了错误的变量,并且还在其中添加了额外的ForEach循环。让我们从Get-Content线开始。此时,在脚本中,您正在循环浏览文件,每个当前文件都由$file表示。所以你真正想要得到的内容是$file,而不是$AiniFile.PSPath

(Get-Content $file)

好的,这使我们将该文件的内容作为字符串数组。现在,我猜你不知道,但-Replace运算符适用于字符串数组。完美,我们碰巧得到了一个字符串数组!由于Get-Content命令被括在括号中,它首先完成,我们实际上可以在它之后立即附加-Replace命令。

(Get-Content $file) -replace [regex]:Escape('C:APath'),$mabyIni

你的-replace命令超级接近!事实上,我必须给你使用[regex]::escape()的道具。这完全是一个专业的举动,干得好!它唯一的问题是替换字符串不需要在括号中,并且它是单引号的,所以它不会扩展字符串,你的.ini文件都会有一行,如下所示:

AIniText = $mabyIniAIniText

我不完全是你想要的,所以我删除了括号(它们没有伤害任何东西,但也没有帮助,所以为了清洁和简单起见,我摆脱了它们(,我也去掉了单引号'因为我们真的只想要存储在该变量中的字符串。

所以现在我们循环访问文件,读取内容,用新路径替换旧路径,剩下的就是输出新的.ini文件。看起来它们已经就位,所以我们只使用文件的现有路径,并将内容设置为更新的数据。

(Get-Content $file) -replace [regex]:Escape('C:APath'),$mabyIni | Set-Content -Path $File.FullName

好了,大功告成!您只需要关闭ForEach循环并运行它。

$mabyIni = "C:NewPath" 
$AiniFile = Get-ChildItem - Path "C:NewPath*" -include *.ini -recurse 
ForEach($file in $AiniFile) { 
(Get-Content $file) -replace [regex]:Escape('C:APath'),$mabyIni | Set-Content -Path $File.FullName
}

相关内容

  • 没有找到相关文章

最新更新