Powershell:基于局部变量的条件标志
Powershell: conditional flag based on a local variable
我的 PowerShell 脚本中有一个名为 $IncludeSubfolders
的变量(0
或 1
)
根据它的值,我想在有或没有 -Recurse
选项的情况下调用 Get-ChildItem
方法。
目前,我的代码如下所示:
if($IncludeSubfolders) {
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
$Files = Get-ChildItem $RootPath -Name $FileMask
}
我想避免这种分支,如果 $IncludeSubfolders
是 1
或没有它,则只需一行代码调用带有 -Recurse
标志的 Get-ChildItem
是 0
.
这可以实现吗?怎么样?
Powershell 版本 5.0.10586.117
应该这样做:
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
$IncludeSubfolders
理想情况下应该是一个布尔值,而不是整数,但它可以很容易地转换。
即使必须保持整数,代码也是一样的。
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
为什么?
因为-Recurse
是一个Switch参数,是一种特殊类型的boolean,不需要显式赋值。存在使它真实,不存在使它虚假。但是所有开关参数也可以采用显式值,直接在它后面使用冒号。
如果您尝试在需要布尔值的表达式中使用 non-boolean 值,PowerShell 将尽最大努力将该值合并为布尔值,在这种情况下 0
将变为 $false
而 1
将变为 $true
.
我的 PowerShell 脚本中有一个名为 $IncludeSubfolders
的变量(0
或 1
)
根据它的值,我想在有或没有 -Recurse
选项的情况下调用 Get-ChildItem
方法。
目前,我的代码如下所示:
if($IncludeSubfolders) {
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
$Files = Get-ChildItem $RootPath -Name $FileMask
}
我想避免这种分支,如果 $IncludeSubfolders
是 1
或没有它,则只需一行代码调用带有 -Recurse
标志的 Get-ChildItem
是 0
.
这可以实现吗?怎么样?
Powershell 版本 5.0.10586.117
应该这样做:
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
$IncludeSubfolders
理想情况下应该是一个布尔值,而不是整数,但它可以很容易地转换。
即使必须保持整数,代码也是一样的。
$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
为什么?
因为-Recurse
是一个Switch参数,是一种特殊类型的boolean,不需要显式赋值。存在使它真实,不存在使它虚假。但是所有开关参数也可以采用显式值,直接在它后面使用冒号。
如果您尝试在需要布尔值的表达式中使用 non-boolean 值,PowerShell 将尽最大努力将该值合并为布尔值,在这种情况下 0
将变为 $false
而 1
将变为 $true
.