如何使用Powershell比较现有文件的if语句?

时间:2019-06-18 02:35:49

标签: powershell

我有一个带if语句的函数。我想检查一个文件夹和文件的所有存在,然后执行一些操作。

我尝试了这段代码,我使用了-and,但是它只检查第一个文件夹,如果第一个文件夹不存在,它将执行下一个过程,而不是逐个检查文件夹和文件,然后执行下一步。

Function Call
{
& .\run.cmd
start-Sleep -s 1 
$Log = Get-Content .\log.txt | Where-Object {$_.Contains("111")}

if(
    ($Log) -and 
    (![System.IO.Directory]::Exists("$FilePath\AGM")) -and 
    (![System.IO.Directory]::Exists("$FilePath\GM\JOB")) -and
    (![System.IO.Directory]::Exists("$FilePath\GM\PO")) -and
    (![System.IO.Directory]::Exists("$FilePath\GM\GM.flg"))
){
        New-Item -ItemType Directory -Force -Path "$FilePath\GM"
        New-Item -ItemType Directory -Force -Path "$FilePath\GM\JOB"
        New-Item -ItemType Directory -Force -Path "$FilePath\GM\PO"
        New-Item -ItemType File -Force -Path "$FilePath\GM\GM.flg"

    CHK_STAGE

} 
else 
{
    END
}
}

1 个答案:

答案 0 :(得分:1)

此操作完全按照设计进行。您只有一个if语句,其中有多个子句与-and连接,这意味着所有这些子句都必须是$true 才能满足条件并输入块。

您似乎真正想要的是四个单独的if语句,每个语句计算一个条件,然后对结果进行处理。

if($Log) {
    if (![System.IO.Directory]::Exists("$FilePath\AGM")) {
        New-Item -ItemType Directory -Force -Path "$FilePath\GM"
    }

    if (![System.IO.Directory]::Exists("$FilePath\GM\JOB")) {
        New-Item -ItemType Directory -Force -Path "$FilePath\GM\JOB"
    }

    if (![System.IO.Directory]::Exists("$FilePath\GM\PO")) {
        New-Item -ItemType Directory -Force -Path "$FilePath\GM\PO"
    }

    if (![System.IO.Directory]::Exists("$FilePath\GM\GM.flg")) {
        New-Item -ItemType File -Force -Path "$FilePath\GM\GM.flg"
    }
}

但是我还要指出,在创建目录时,您的if语句是多余的。

您可以这样做:

New-Item -ItemType Directory -Force -Path "$FilePath\GM"
New-Item -ItemType Directory -Force -Path "$FilePath\GM\JOB"
New-Item -ItemType Directory -Force -Path "$FilePath\GM\PO"

无论目录是否存在,调用都会成功。还将返回每个目录。

对于文件调用,如果文件已经存在,它将对其归零,因此您可以删除-Force,然后使用-ErrorAction Ignore-ErrorAction SilentlyContinue(后者仍然填充{{1 }},而前者则不会;

$Error