我遇到以下问题:
说我有两个Powershell脚本,分别是A.ps1和conf.ps1。
conf.ps1的内容只是A.ps1的点源变量,例如:
$dateLogs = Get-Date -UFormat '%Y%m%d'
$installDir = 'C:\Gcloud\'
$logDir = '$installDir\GcloudLogs'
$logFile = '$logDir\$dateLogs\logFile.txt'
导入后,有趣的是$dateLogs
被扩展了,在调试器中我可以看到"..\20190805\logFile.txt"
但$installDir
出于某种原因不会扩展。
因此,我没有拥有$logFile = "C:\Gcloud\GcloudLogs\20190805\logFile.txt"
,而是拥有"$installDir\GcloudLogs\20190805\logFile.txt"
,而$installDir
永远不会扩展到其真实价值。
我想念什么吗?
自从我为此苦苦挣扎很长时间以来,任何领导都会非常感激。我尝试了几种方法:
- ${$installDir}\GcloudLogs
- $($installDir\GcloudLogs)
- $(${installDir}\GcloudLogs)
用单引号,双引号和根本没有引号...都没有解决。
谢谢大家。
答案 0 :(得分:2)
为了不使单引号或双引号引起混淆,并使您免于使用带有双反斜杠的路径,使用Join-Path cmdlet总是更安全。
$dateLogs = '{0:yyyyMMdd}' -f (Get-Date) # a more 'PowerShelly' way of formatting a date
$installDir = 'C:\Gcloud'
$logDir = Join-Path -Path $installDir -ChildPath 'GcloudLogs'
$logFile = Join-Path -Path $logDir -ChildPath "$dateLogs\logFile.txt" # use double-quotes here
还可以使用.NET [System.IO.Path]::Combine()
函数
$dateLogs = '{0:yyyyMMdd}' -f (Get-Date)
$installDir = 'C:\Gcloud'
$logDir = [System.IO.Path]::Combine($installDir, "GcloudLogs")
$logFile = [System.IO.Path]::Combine($logDir, $dateLogs, "logFile.txt")
这两个方法都会创建以下路径:
$logDir --> C:\Gcloud\GcloudLogs $logFile --> C:\Gcloud\GcloudLogs\20190805\logFile.txt
答案 1 :(得分:0)
在Powershell中,字符串常量中的单引号和双引号之间是有区别的。尝试改为使用双引号。