写入文本文件时,字符串变量的行为异常

问题描述

下面是我遇到的代码。它从config.txt文件提取信息,并将信息设置为childofRoot.properties文件。出于某种原因,设置字符串时会加上额外的内容

$date = (Get-Date -Format "MM-dd-yyyy'_'HH-mm")
$backup = 'backuplocation'
$temp = 'replace'
$p = ($PSScriptRoot + 'childofRoot.properties')


$cuidConf = Get-Content -Path ($PSScriptRoot + 'config.txt') | Select-String "cuids_rootfolder=" | Out-String
$cuidConf = $cuidConf.replace("cuids_rootfolder=","").replace("`n","")
$cuids = $cuidConf.Split(";")

$backuppath = ((Get-Content -Path ($PSScriptRoot + 'config.txt'))) | Select-String "backuplocation=" | Out-String
$backuppath = $backuppath.replace("backuplocation=","")
$backuppath = $backuppath + $date + "\"


$foldername,$cuid = ($cuids[0].Split(","))

$backup1 = ($backuppath + "Folder a.lcmbiar")
        


((Get-content -Path $p).replace($temp,$cuid)) | Set-Content -Path $p

((Get-content -Path $p).replace($backup,$backup1)) | Set-Content -Path $p

config.txt内容

backuplocation=C:\backuplcm\backupfiles\

childofRoot.properties内容

exportLocation=backuplocation

预期输出写入childofRoot.properties

exportLocation=C:\backuplcm\backupfiles\08-18-2020_17-59\Folder\a.lcmbiar

我看到的输出已写入childofRoot.properties

exportLocation=
C:\backuplcm\backupfiles\


08-18-2020_18-02\Folder a.lcmbiar

是的,我已经尝试使用.replace("`n","")删除换行符 我也让别人看了这个脚本,变量刚好设置好,在文本文件中结果就不同了。 我能够在不同机器上的Powershell 4和Powershell 5上复制它。如果有人在他们的计算机上尝试此操作,看看他们是否可以解决问题。

解决方法

多余的换行符来自| Select-String "backuplocation=" | Out-String,而.Replace("`n","")不能解决问题的原因是Windows使用序列"`r`n"来换行。

我建议使用Where-Object而不是Select-String | Out-String来简化脚本:

$backuppath = Get-Content -Path (Join-Path $PSScriptRoot config.txt) | Where-Object {$_ -match "backuplocation="}
$backuppath = $backuppath -replace 'backuplocation='

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...