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

[玩转系统] 如果 PowerShell 中不存在则创建文件 [4 种方法]

作者:精品下载站 日期:2024-12-14 05:25:53 浏览:18 分类:玩电脑

如果 PowerShell 中不存在则创建文件 [4 种方法]


[玩转系统] 如果 PowerShell 中不存在则创建文件 [4 种方法]

使用 if-else 语句

我们可以使用 if-else 语句创建一个文件,如下所示:

使用New-Item Cmdlet

如果 PowerShell 中不存在文件,则创建该文件:

  • 使用带有 if 条件的 Test-Path cmdlet 来检查文件是否存在。
  • 如果新文件不存在,请使用 New-Item cmdlet 创建新文件。
  • else 条件中打印错误消息。

使用 if 语句:

$file = "D:\test.txt"
if(!(Test-Path -Path $file)){
    New-Item -ItemType File -Path $file
    Write-Output "File '$file' created successfully"
} else {
    Write-Output "File '$file' already exists"
}

输出 :

    Directory: D:\
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         1/16/2023   4:19 PM              0 test.txt
File 'D:\test.txt' created successfully

PowerShell 中的 Test-Path cmdlet 检查文件系统上是否存在文件或文件夹。该 cmdlet 根据所需文件是否存在返回一个布尔值。此 cmdlet 的基本语法是 Test-Path -Path ,其中 -Path 参数指定我们要检查的文件或文件夹的路径。它可以是相对路径或绝对路径。

Test-Path cmdlet 可以与其他 cmdlet(例如 if 语句)结合使用,对文件或文件夹执行条件操作。也可以用它来检查文件是否存在。例如,我们将其与if语句一起使用来检查系统中是否存在文件

如果该文件不存在,我们将使用 New-Item cmdlet。 New-Item cmdlet 在文件系统或注册表中创建新文件、目录、符号链接、联结、硬链接、注册表项和变量。该 cmdlet 将 -Path-ItemType 作为参数。例如,我们使用此 cmdlet 创建了一个新文件。

在else语句中,如果文件已经存在,程序会在控制台显示错误信息:

输出 :

File 'D:\test.txt' already exists

使用 Out-File Cmdlet

要创建 PowerShell 中不存在的文件,请将上述代码的 New-Item cmdlet 替换为 Out-File cmdlet。

使用 if 语句:

$file = "D:\test.txt"
if(!(Test-Path -Path $file)) {
    Out-File -FilePath $file
    Write-Output "File '$file' created successfully"
} else {
    Write-Output "File '$file' already exists"
}

输出 :

File 'D:\test.txt' created successfully

我们讨论了 Test-Path cmdlet,同时解释了使用 New-Item cmdlet 的代码部分。在本节中,我们使用了 PowerShell 的 Out-File cmdlet。

Out-File cmdlet 将命令的输出发送到文件。它将命令或脚本的输出重定向到文件,而不是将其显示在屏幕上。它创建或覆盖指定的文件并将输出写入该文件,但为了处理覆盖,我们可以使用 Test-Path cmdlet 来检查文件是否存在。

例如,我们使用 Out-File cmdlet 创建一个文件,提供 file 作为 -Path

替换 Test-Path Cmdlet

我们可以将 if 语句中的 Test-Path cmdlet 替换为以下任意一个,以检查文件是否存在:

  • Get-Item cmdlet 检索有关文件系统中的项目(例如文件或目录)的信息。
  • PowerShell 中的 Get-ChildItem cmdlet 检索有关目录中的文件和子目录的信息。
  • Get-ItemProperty cmdlet 获取文件、目录或其他项目的属性,具体取决于项目类型和访问该项目的提供程序。
  • [System.IO.File]::Exists() 是 PowerShell 中 System.IO.File 类的一个方法,用于检查指定路径中是否存在文件。
  • dir cmdlet 是 Get-ChildItem cmdlet 的别名。

请注意,所有这些 cmdlet 都需要带有 Ignore 值的 -ErrorAction 参数来消除所有错误。

使用 try-catch 语句

我们可以将上述代码段中的 if-else 语句替换为 try-catch 块来创建文件,如下所示:

使用New-Item Cmdlet

如果 PowerShell 中不存在文件,则创建该文件:

  • 如果文件已存在,请使用 try 语句引发任何错误。
  • 使用 New-Item cmdlet 在 try 块中创建新文件。
  • 使用catch语句来处理通过打印错误消息抛出的错误。

使用try-catch语句:

$file = "D:\test.txt"
Try {
    New-Item -ItemType File -Path $file -ErrorAction Stop
    Write-Output "File created successfully"
} Catch [System.IO.IOException]{
    Write-Host "Error: $($_.Exception.Message)"
}

输出 :

    Directory: D:\
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         1/16/2023   4:31 PM              0 test.txt
File created successfully

在 PowerShell 中,try-catch 语句处理脚本中可能发生的错误。

  • try 块包含可能引发异常的代码。
  • catch 块包含在出现异常时处理异常的代码。

如果 try 块中出现异常,它会将错误抛出到 catch 块,在该块中可以记录、显示或以其他方式处理异常。 catch 块还可以针对不同类型的异常指定不同的操作,并可以输出错误消息。即使发生错误,它也允许脚本继续运行而不是停止执行。

例如,我们使用try-catch语句来创建一个文件。 try 块包含用于在指定路径创建新文件的 New-Item cmdlet。如果文件不存在,该命令将成功创建该文件。如果发生异常,例如文件已存在,则将执行 catch 块。它传递了 System.IO.IOException 并显示错误消息:

输出 :

Error: The file 'D:\test.txt' already exists.

使用 Out-File Cmdlet

要创建 PowerShell 中不存在的文件,请将 try 块中包含的上述代码的 New-Item cmdlet 替换为 >Out-File cmdlet。

使用try-catch语句:

$file = "D:\test.txt"
Try {
    Out-File -FilePath $file -NoClobber -ErrorAction Stop
    Write-Output "File created successfully"
} Catch [System.IO.IOException]{
    Write-Host "Error: $($_.Exception.Message)"
}

输出 :

File created successfully

Out-File cmdlet 中的 -NoClobber 开关可防止覆盖现有文件。当出现 -NoClobber 开关时,如果指定文件路径中已存在文件,Out-File 将不会创建或覆盖该文件,而是返回错误。当我们想要确保不会意外覆盖重要文件时,此开关会很有帮助。

例如,我们使用 Out-File cmdlet 中的 -NoClobber 开关而不是庞大的 if-else 语句来创建文件(如果有)不存在。

使用单行线

要创建文件(如果不存在),请使用单行代码,如下所示:

  • 使用 Test-Path 或其他 cmdlet 检查文件是否存在。如果是,它将返回true
  • 使用逻辑运算符-eq检查上述命令是否返回false。如果是这样,请使用 Out-FileNew-Item cmdlet 创建该文件。

使用单行:

$file = "D:\test.txt"
(Test-Path -Path $file) -eq $false | New-Item -ItemType File -Path $file -ErrorAction SilentlyContinue

输出 :

    Directory: D:\
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         1/16/2023   4:48 PM              4 test.txt

我们可以将 Test-Path cmdlet 替换为 Get-Item 或我们在解释使用 if-else 语句的代码部分时讨论的其他 cmdlet 。此外,Out-File cmdlet 可以替换 New-Item cmdlet。本节的主要重点是编写一个一行脚本,该脚本可以在文件不存在时创建该文件。

在 PowerShell 中,-eq 是一个逻辑运算符,用于比较两个值是否相等。如果值相等,则返回 $True;如果不相等,则返回 $False

例如,我们检查 Test-Path cmdlet 的输出是否等于 False 值。如果文件已存在,则 Test-Path cmdlet 返回 True,并且比较返回 False,但如果文件不存在,则Test-Path cmdlet 返回 False,比较返回 True

如果该文件不存在,脚本将使用 New-Item cmdlet 创建该文件。但是,如果文件已存在,-ErrorAction SilentlyContinue 开关会阻止 New-Item cmdlet 引发异常。因此,如果文件已存在,命令行将不会显示输出。

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

取消回复欢迎 发表评论:

关灯