Powershell 条件逻辑不再按预期工作?
这是漫长的一天,我想我快疯了。我想测试一个文件并生成一封电子邮件(如果不存在的话)。在这里,它被缩减到其最小值:Powershell 条件逻辑不再按预期工作?,powershell,logic,Powershell,Logic,这是漫长的一天,我想我快疯了。我想测试一个文件并生成一封电子邮件(如果不存在的话)。在这里,它被缩减到其最小值: > IF('False' -eq (Test-Path D:\Scripts\SFTP\Import\*)){ECHO "SEND EMAIL"} > SEND EMAIL __________________________________________________________________________ > IF((Test-Path D:\Sc
> IF('False' -eq (Test-Path D:\Scripts\SFTP\Import\*)){ECHO "SEND EMAIL"}
> SEND EMAIL
__________________________________________________________________________
> IF((Test-Path D:\Scripts\SFTP\Import\*) -eq 'False'){ECHO "SEND EMAIL"}
>
为什么第二个命令不起作用
我尝试在'IF'语句之外运行测试路径
,将其放入一个变量中,然后针对该变量进行测试,但同样无效
如果我只是运行“Test Path”命令,我会得到预期的布尔值“False”。我以前曾以这种方式使用过条件逻辑,它是有效的
我做错了什么?原因就是这样。在第一个操作中,有一个字符串作为比较的第一个操作数。这将强制PS在可能的情况下将第二个操作数强制为字符串。在本例中,这意味着调用布尔值的
.ToString()
方法,该方法将返回“False”字符串(当然,如果布尔值实际上为False)。但在第二种情况下,将布尔值表示为第一个操作数,因此字符串被强制为布尔值。显然,它不起作用。要避免这些问题,请使用内置的$false
(或$true
)变量。就个人而言,我建议只否定测试路径
。以下是一些可行的方法:
if( -NOT (Test-Path D:\Scripts\SFTP\Import\*)){
if( (Test-Path D:\Scripts\SFTP\Import\*) -eq $false){
对于powershell的强制规则
'False' -eq (Test-Path D:\Scripts\SFTP\Import\*)
比较的第二个值计算为[string]
这里
比较的第二个值不能计算为[Bool],否则它将失败
对于bool comparin is optima,请使用自动变量
$false
和$true
,谢谢您的帮助。现在好像在工作。我现在的问题是,我是如何在我编写的其他脚本中获得几乎相同的测试的。我需要看看其他的部分。
(Test-Path D:\Scripts\SFTP\Import\*) -eq 'False'