我正在使用字符串扩展功能来构建文件名,我不太明白发生了什么。
考虑:
$baseName = "base"
[int]$count = 1
$ext = ".ext"
$fileName = "$baseName$count$Ext"
#filename evaluates to "base1.ext" -- expected
#now the weird part -- watch for the underscore:
$fileName = "$baseName_$count$Ext"
#filename evaluates to "1.ext" -- the basename got dropped, what gives?
添加下划线似乎完全抛弃了Powershell的凹槽!这可能是一些奇怪的语法规则,但我想了解规则。任何人都可以帮助我吗?
答案 0 :(得分:19)
实际上你在这里看到的是弄清楚一个变量何时停止而下一个变量开始的麻烦。它试图寻找$ baseName _。
修复方法是将变量括在花括号中:
$baseName = "base"
[int]$count = 1
$ext = ".ext"
$fileName = "$baseName$count$Ext"
#filename evaluates to "base1.ext" -- expected
#now the wierd part -- watch for the underscore:
$fileName = "$baseName_$count$Ext"
#filename evaluates to "1.ext" -- the basename got dropped, what gives?
$fileName = "${baseName}_${count}${Ext}"
# now it works
$fileName
希望这有帮助
答案 1 :(得分:7)
你也可以使用 “$ baseName`_ $计数$分机”
答案 2 :(得分:4)
Underscore是标识符中的合法字符。因此,它正在寻找名为$baseName_
的变量。哪个不存在。