我正在尝试编写一个 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 地址。 我只是不想在这里分享这些信息。
有人能明白为什么这不能正常工作吗? 如果您需要更多详细信息,我很乐意提供我能提供的信息,而无需提供任何专有信息。 谢谢!
请参阅上面的示例代码和遇到的问题
我过去曾这样做过,这就是我这样做的方式。
# 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”,因此如果字符串中存在字母字符,请务必匹配重载括号内的大小写。