如何解决写入文本文件时,字符串变量的行为异常
下面是我遇到的代码。它从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='
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。