当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell - 如果不存在则创建目录

作者:精品下载站 日期:2024-12-14 21:56:43 浏览:13 分类:玩电脑

PowerShell - 如果不存在则创建目录


在 PowerShell 脚本文件中执行基于文件夹的操作时,检查目录是否存在并在不存在时创建目录是很常见的做法。

如果文件夹不存在,那么在尝试访问文件夹文件、删除文件夹、在文件夹中创建新文件或任何类型的基于文件夹的操作时,它可能会在脚本中引发异常。

在 PowerShell 中,有多种方法可以创建目录(如果不存在)并在执行任何基于目录的操作之前检查目录是否存在以避免异常。

在本文中,我将通过使用 PowerShell 的示例向您解释如何创建目录(如果不存在)

[玩转系统] PowerShell - 如果不存在则创建目录

有四种不同的方法来检查文件夹是否存在并创建目录,如下所示

  • 测试路径
  • 获取项目
  • 获取子项目
  • [系统.IO.文件]::存在(目录)

让我们了解检查文件夹是否存在或创建文件夹的每种方法。

PowerShell 使用测试路径创建目录(如果不存在)

PowerShell Test-Path cmdlet 检查目录是否存在。

如果目录存在则返回 $True。如果路径或目录丢失或不存在,它将返回 $False。

使用 PowerShell New-Item cmdlet,如果目录不存在,它将使用 Test-Path 创建目录。

测试路径 cmdlet 语法

Test-Path -Path <FolderPath>

在上面的语法中,

FolderPath - 文件夹位置

测试路径示例

让我们考虑一个示例来了解如何使用 PowerShell Test-Path cmdlet 检查并创建目录(如果不存在)。

我们要在D:盘创建Log-FTP03目录。

运行以下代码以了解 Test-Path cmdlet

$FolderName = "D:\Logs-FTP03\"
if (Test-Path $FolderName) {
   
    Write-Host "Folder Exists"
    # Perform Delete file from folder operation
}
else
{
  
    #PowerShell Create directory if not exists
    New-Item $FolderName -ItemType Directory
    Write-Host "Folder Created successfully"

}

在上面的 PowerShell 脚本中,

$FolderName 变量包含目录路径

使用 Test-Path cmdlet,它首先检查该位置是否存在文件夹。

如果该文件夹存在,则控制台上会显示“文件夹存在”消息,并执行 if 语句中写入的任何操作,例如从文件夹中删除文件等...

如果该文件夹不存在,则在控制台上打印一条消息“文件夹不存在”

使用 New-Item cmdlet,它会创建指定路径并将 ItemType 参数指定为 Directory 的目录。

PowerShell 使用 Get-Item 创建目录(如果不存在)

PowerShell Get-Item cmdlet 用于获取指定位置的项目。

您可以使用通配符 (*) 来获取该项目的所有内容。

我们将了解如何使用 PowerShell 中的 Get-Item cmdlet 创建目录(如果不存在)。

获取项目语法

Get-Item
   [-Path] <String[]>
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-Force]
   [-Credential <PSCredential>]
   [-Stream <String[]>]
   [<CommonParameters>]

在上面的 Get-Item 语法中,您可以使用不同的参数来获取特定的项目。

让我们了解一下,在 PowerShell 中使用 Get-Item cmdlet 检查目录是否存在。

获取项目示例

让我们考虑一个在 D 盘中创建名为 Log-FTP03 的目录的示例。

使用 PowerShell Get-Item cmdlet 检查文件夹是否存在,如果不存在则创建目录。

$FolderName = "D:\Logs-FTP03\"
$FileName = "D:\Logs-FTP03\ftp-103.txt"

if(Get-Item -Path $FolderName -ErrorAction Ignore)
{
   
        Write-Host "Folder Exists"

        #Create new file

        if(Get-Item -Path $FileName -ErrorAction Ignore){
              Write-Host "File already exists"
        }
        else
        {
            New-Item -Verbose $FileName -ItemType File
           
        }
}
else
{
    Write-Host "Folder Doesn't Exists"

    
    #PowerShell Create directory if not exists
    New-Item $FolderName -ItemType Directory

}

在上面的 PowerShell 脚本中,

$FileName 变量包含新的文件名路径。

$FolderName 变量包含新文件夹名称路径

使用 Get-Item cmdlet,它首先检查该位置是否存在文件夹。

如果文件夹存在,则它会检查文件是否存在,以使用 New-Item cmdlet 创建新文件。

如果文件夹不存在,则使用具有 ItemType 参数作为 Directory 的 New-Item cmdlet 来创建目录。

酷提示:如何在 PowerShell 中获取文件创建日期!

Get-ChildItem 创建目录(如果不存在)

PowerShell Get-ChildItem cmdlet 用于从一个或多个指定位置获取项目或子项目。

我们将通过示例了解如何使用 Get-ChildItem cmdlet 创建文件夹(如果不存在)。

获取子项语法

Get-ChildItem
   [[-Path] <string[]>]
   [[-Filter] <string>]
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Recurse]
   [-Depth <uint32>]
   [-Force]
   [-Name]
   [-Attributes <FlagsExpression[FileAttributes]>]
   [-FollowSymlink]
   [-Directory]
   [-File]
   [-Hidden]
   [-ReadOnly]
   [-System]
   [<CommonParameters>]

在上述 Get-ChildItem 语法中,您可以使用不同的参数从 Path 参数指定的一个或多个特定位置获取项目。

让我们了解一下,使用 Get-ChildItem cmdlet 来检查 PowerShell 中是否存在文件夹。

获取子项示例

让我们考虑一个在 D 盘上创建新目录 Logs-FTP01 的示例。

使用 Get-ChildItem cmdlet,它将检查文件夹是否存在,运行以下脚本

$FolderName = "D:\Logs-FTP01\"

if(Get-ChildItem -Path $FolderName -ErrorAction Ignore)
{
    Write-Host "Folder Exists"
    #Perform Folder based operation, Count files in folder
    (Get-ChildItem -Path $FolderName -File | Measure-Object).Count
}
else
{
    Write-Host "Folder Doesn't Exists"

    #PowerShell Create directory if not exists
    New-Item $FolderName -ItemType Directory
}

在上面的 PowerShell 脚本中,

$FolderName 变量包含新的目录名称

使用 Get-ChildItem cmdlet,它首先检查该位置是否存在文件夹。

如果该文件夹存在,则会对文件夹中的文件进行计数。

如果该文件夹不存在,则在控制台上打印一条消息“文件夹不存在”。

如果不存在,它将使用 New-Item cmdlet 创建目录,并将文件夹名称指定为路径。

-ErrorActionignore参数忽略检查文件夹存在操作时引发的异常。

酷提示:如何在 PowerShell 中查找大尺寸文件!

使用 [System.IO.Directory]::Exists() 方法

使用.Net类System.IO.Directory和Exists()方法,我们可以在执行任何操作之前检查目录是否存在。

让我们通过示例来了解如何使用 [System.IO.Directory]::Exists() 方法。

例如,如果您想在指定位置创建一个新目录。

在创建新目录之前,首先检查该文件夹是否存在以避免错误。

[System.IO.Directory]:: Exists() 方法将文件夹名称作为输入,并根据文件夹存在与否返回 True 或 False。

$FolderName = "D:\Logs-FTP03\"

if([System.IO.Directory]::Exists($FolderName))
{
    Write-Host "Folder Exists"
    Get-ChildItem -Path $FolderName | Where-Object {$_.CreationTime -gt (Get-Date).Date}   
}
else
{
    Write-Host "Folder Doesn't Exists"
    
    #PowerShell Create directory if not exists
    New-Item $FolderName -ItemType Directory
}

在上面的 PowerShell 脚本中,

$FolderName - 包含文件夹名称路径

使用 [System.IO.Directory]::Exists() 方法检查文件夹是否存在。如果文件存在则返回 true,否则返回 false。

如果该文件夹存在,则 Get-ChildItem 将从该目录获取今天创建的文件列表。

如果文件夹不存在,它将使用 New-Item cmdlet 作为指定的文件夹名称路径来创建目录。

酷提示:如何在 PowerShell 中列出目录中的文件!

结论

在上面的文章中,我解释了使用 PowerShell 方式如果目录不存在则创建目录的四种不同方法。

这些方法是 Test-Path、Get-Item、Get-ChildItem 和 [System.IO.Directory]::Exists()。

在执行任何基于文件夹的操作之前,最好检查目录是否存在,以避免错误。

使用目录存在检查,您可以处理文件夹操作的错误和条件。

您可以在 ShellGeek 主页上找到有关 PowerShell Active Directory 命令和 PowerShell 基础知识的更多主题。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯