我在powershell中有以下caml。如果我在CAML查询中硬编码$ month,那么它可以工作。我正在使用的语法是正确的吗?
{{1}}
答案 0 :(得分:2)
在PowerShell中,字符串是可扩展(如perl中的可插入字符串)或 literal 。
用双引号括起来的任何内容("
)都是可扩展的,而单引号('
)用于字符串文字,就像你的情况一样。
$month = 'Jan'
"First month is $month" # This will result in: First month is Jan
'First month is $month' # This will result in: First month is $month
对于多行字符串,请使用here-string(通常在其他语言中称为here-docs)。同样的规则适用:
$CAML = @"
<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">$month</Value>
</Eq>
</Where>
"@
如果要使用字符串文字(即,如果字符串包含您要保留的其他特殊字符或文字$
)但是您需要插入特定的变量值,请使用{{1格式化运算符as shown by @jisaak:
-f
要详细了解字符串扩展和引用,请参阅Get-Help about_Quoting_Rules
答案 1 :(得分:1)
您的变量因为使用单引号而无法替换。您可以使用双引号或格式字符串(别名-f
):
write-host $month
$CAML = '<Where>
<Eq>
<FieldRef Name="Period" />
<Value Type="Text">{0}</Value>
</Eq>
</Where>' -f $month
答案 2 :(得分:0)
谢谢Jissak。只是想分享以下代码,因为这个也适用。
@Override
protected void onDestroy() {
MainGUI.Donors.clear();
super.onDestroy();
}