我有一个带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
}
}
答案 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