处理目录存在异常

时间:2019-06-25 19:06:36

标签: powershell exception

我是PowerShell的新手。我有一段代码可以检查文件夹“ ilalog”是否存在。第一次运行该脚本时,它正在检查文件夹“ ilalog”,如果不存在,则说明正在创建。当我第二次运行脚本时。我收到以下错误:

  

具有指定名称D:\ Temp \ ilalog的项目已存在   “ FullyQualifiedErrorId:   DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand”。

如何处理此异常

我尝试使用try和Catch块

 $rgflder="ilalog"
    [bool]$checkrg=Test-Path D:\Gdump\$rgfolder -PathType Any
    if ( $checkrg -eq $False)
    {
try{
    New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
    }
catch [System.IO.IOException] 
    {
            if ($_.CategoryInfo.Category -eq $resExistErr) {Write-host "Dir Exist"}
} 
}       
else
{
Write-Output "Directory Exists" 
 }

2 个答案:

答案 0 :(得分:0)

如果要在基于错误类型采取措施的同时继续处理脚本,一种简单的方法是仅检查$error变量。也可以使用陷阱。

$error.clear()
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
if ($error[0].Exception.GetType().Fullname -eq 'System.IO.IOException') {
    "Dir Exists"
}
else {
    "Dir was created"
}

如果要使用try-catch,则需要将非终止错误视为终止错误以激活catch块。您可以使用-ErrorAction Stop来做到这一点。

try {
    New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory" -ErrorAction Stop
    }
catch [System.IO.IOException] 
    {
    "Exception caught!"
    }

或者,您可以通过设置$ErrorActionPreference = 'Stop'来在会话中进行管理,该设置将应用于该会话中的所有命令。

请记住,传递给-ErrorAction的值将覆盖$ErrorActionPreference中的设置。同样,错误操作设置对终止错误没有影响。因此,您不能期望设置-ErrorAction Continue并让代码继续处理终止错误。

许多命令返回的对象可能会或可能不会终止错误。您将明确找到更多成功的地方,并指定何时要抛出终止错误。

您可以在About Common Parameters上了解有关错误操作首选项的更多信息。我实际上喜欢Everything About Exceptions在PowerShell中进行异常处理。

答案 1 :(得分:0)

为什么不简单地像下面这样?

$rgflder="ilalog"

# combine the path and foldername
$rgPath = Join-Path -Path 'D:\Gdump' -ChildPath $rgflder

# test if the folder already exists
if (Test-Path $rgPath -PathType Container) {
    Write-Output "Directory Exists"
}
else {
    # if not, create the new folder
    try {
        $null = New-Item -Path $rgPath -ItemType Directory -ErrorAction Stop
        Write-Output "Created directory '$rgPath'"
    }
    catch {
        # something terrible happened..
        Write-Error "Error creating folder '$rgPath': $($_.Exception.Message)"
    }
}