Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 条件逻辑不再按预期工作?_Powershell_Logic - Fatal编程技术网

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'