这是漫长的一天,我想我会发疯.我想测试一个文件,如果不存在则生成一封电子邮件.在这里它被削减到最小:
> 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"}
>
Run Code Online (Sandbox Code Playgroud)
为什么第二个命令不起作用?
我已经尝试Test-Path将'IF'语句的外部运行到一个变量中然后对其进行测试,它再次无效.
如果我只是运行'Test-Path'命令,我会按预期得到一个布尔值'False'.我之前以这种方式使用过条件逻辑并且它有效.
我究竟做错了什么?
原因是这个.在第一个中,您有一个字符串作为比较的第一个操作数.如果可能,这会强制PS将第二个操作数强制转换为字符串.在这种情况下,这意味着调用.ToString()布尔值的方法,该方法将返回'False'字符串(如果布尔值当然是假的).在第二种情况下,您将一个布尔值作为第一个操作数,因此该字符串被强制转换为布尔值.显然它不起作用.要避免这些问题,请使用builtin $false(或$true)变量.我个人建议只是否定Test-Path.以下是一些应该有效的方法:
if( -NOT (Test-Path D:\Scripts\SFTP\Import\*)){
if( (Test-Path D:\Scripts\SFTP\Import\*) -eq $false){
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |