我的PowerShell脚本中有一个名为$IncludeSubfolders
的变量(0
或1
)
根据其价值,我想使用或不使用Get-ChildItem
选项来调用-Recurse
方法。
目前,我的代码如下所示:
if($IncludeSubfolders) {
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
$Files = Get-ChildItem $RootPath -Name $FileMask
}
我想避免这种分支,如果Get-ChildItem
为-Recurse
,则只有一行代码调用$IncludeSubfolders
1
标记,如果是0
则为:progress-bar
{1}}。
这可以实现吗?怎么样?
Powershell版本5.0.10586.117
答案 0 :(得分:7)
$IncludeSubfolders
理想情况下应该是布尔值,而不是整数,但可以轻松转换。
即使你必须保持整数,代码也一样。
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
因为-Recurse
是一个Switch参数,它是一种特殊类型的布尔值,其中不需要显式值。现在使它成为现实,缺席使其成为虚假。但是所有开关参数也可以采用显式值,直接使用冒号。
如果您尝试在需要布尔值的表达式中使用非布尔值,PowerShell将尽最大努力将该值合并为布尔值,在这种情况下,0
将变为$false
而1
将成为$true
。
答案 1 :(得分:1)
这应该这样做:
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders