2

長い一日だったし、気が狂いそうです。ファイルをテストし、存在しない場合は電子メールを生成したかったのです。ここでは、最小限に抑えています。

> 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"}
> 

2 番目のコマンドが機能しないのはなぜですか?

「IF」ステートメントの外側を変数に実行してから、それに対してテストしようとしましたTest-Pathが、やはり機能しません。

「Test-Path」コマンドを単純に実行すると、ブール値の「False」が期待どおりに返されます。以前にこの方法で条件付きロジックを使用したことがありますが、うまくいきました。

私は何を間違っていますか?

4

2 に答える 2

5

その理由はこれです。最初のものでは、比較の最初のオペランドとして文字列があります。これにより、可能であれば、PS は 2 番目のオペランドを強制的に文字列に変換します。この場合、それ.ToString()は「False」文字列を返すブール値のメソッドを呼び出すことを意味します (もちろん、ブール値が実際に false の場合)。ただし、2 番目のケースでは、最初のオペランドとしてブール値を提示しているため、文字列はブール値に強制されています。明らかに機能していません。これらの問題を回避するには、組み込み$false(または$true) 変数を使用します。個人的には、を否定することをお勧めしTest-Pathます。動作するはずのいくつかの方法を次に示します。

if( -NOT (Test-Path D:\Scripts\SFTP\Import\*)){


if( (Test-Path D:\Scripts\SFTP\Import\*) -eq $false){
于 2012-11-06T15:14:02.907 に答える
1

powershell の強制ルールについて

'False' -eq (Test-Path D:\Scripts\SFTP\Import\*)

比較の 2 番目の値は [string] として評価されます

ここ

(Test-Path D:\Scripts\SFTP\Import\*) -eq 'False'

比較の 2 番目の値は [Bool] として評価できず、失敗します。

bool comparin が最適な場合は、自動変数$falseを使用し、$true

于 2012-11-06T15:18:09.870 に答える