用于查找/替换批处理文件中的多个项目的 Powershell 脚本

问题描述 投票:0回答:1

我正在尝试编写一个 powershell 脚本,该脚本将在批处理文件中获取 IP 地址(子网)并用更新的值替换它们。 我正在使用以下代码,但替换并非全部正确完成,其中一些只是不正确的值,然后它们在末尾添加了字符。 我试图对子网值进行一对一的替换。 这是我的代码示例:

# Define the path to your batch file
$batchFilePath = "C:\path\to\your\batchfile.bat"

# Read the content of the batch file
$batchFileContent = Get-Content -Path $batchFilePath

# Define the replacements
$replacements = @{
    "oldString1" = "newString1"
    "oldString2" = "newString2"
    # Add more replacements as needed
}

# Perform the replacements
foreach ($oldString in $replacements.Keys) {
    $batchFileContent = $batchFileContent -replace [regex]::Escape($oldString), $replacements[$oldString]
}

# Write the updated content back to the batch file
$batchFileContent | Set-Content -Path $batchFilePath

对于值“oldString1”和“newString1”,这些值将相应地替换为 IP 地址。 我只是不想在这里分享这些信息。

有人能明白为什么这不能正常工作吗? 如果您需要更多详细信息,我很乐意提供我能提供的信息,而无需提供任何专有信息。 谢谢!

请参阅上面的示例代码和遇到的问题

powershell replace
1个回答
0
投票

我过去曾这样做过,这就是我这样做的方式。

# Define the path to your batch file
$batchFilePath = "C:\path\to\your\batchfile.bat"

# Read the content of the batch file
$batchFileContent = Get-Content -Path $batchFilePath

# Define the replacements
$NewFileContent1 = $batchFileContent.Replace('192.168.10.100','10.200.30.46')
Set-Content -Value $NewFileContent1 -Path $batchFilePath -Force
$NewFileContent2 = $NewFileContent1.Replace('192.1686.10.55','10.10.133.18')
Set-Content -Value $NewFileContent2 -Path $batchFilePath -Force

您也可以更积极地在一行上使用多个“替换”方法。

$NewFileContent1 = $batchFileContent.Replace('192.168.10.100','10.200.30.46').Replace('192.1686.10.55','10.10.133.18')

重要提示:由于 IP 地址是数字,因此并不重要,但是由于您没有共享实际值,所以我想确定并告诉您替换方法重载中的字符串确实区分大小写。因此,例如“cat”不等于“CAT”,因此如果字符串中存在字母字符,请务必匹配重载括号内的大小写。

© www.soinside.com 2019 - 2024. All rights reserved.