问题描述
下面是我遇到的代码。它从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
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='