如果 PowerShell 中不存在则创建文件 [4 种方法]
使用 if-else 语句
我们可以使用 if-else 语句创建一个文件,如下所示:
使用New-Item Cmdlet
如果 PowerShell 中不存在文件,则创建该文件:
- 使用带有
if条件的Test-Pathcmdlet 来检查文件是否存在。 - 如果新文件不存在,请使用
New-Itemcmdlet 创建新文件。 - 在
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类的一个方法,用于检查指定路径中是否存在文件。dircmdlet 是Get-ChildItemcmdlet 的别名。
请注意,所有这些 cmdlet 都需要带有 Ignore 值的 -ErrorAction 参数来消除所有错误。
使用 try-catch 语句
我们可以将上述代码段中的 if-else 语句替换为 try-catch 块来创建文件,如下所示:
使用New-Item Cmdlet
如果 PowerShell 中不存在文件,则创建该文件:
- 如果文件已存在,请使用
try语句引发任何错误。 - 使用
New-Itemcmdlet 在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 successfullyOut-File cmdlet 中的 -NoClobber 开关可防止覆盖现有文件。当出现 -NoClobber 开关时,如果指定文件路径中已存在文件,Out-File 将不会创建或覆盖该文件,而是返回错误。当我们想要确保不会意外覆盖重要文件时,此开关会很有帮助。
例如,我们使用 Out-File cmdlet 中的 -NoClobber 开关而不是庞大的 if-else 语句来创建文件(如果有)不存在。
使用单行线
要创建文件(如果不存在),请使用单行代码,如下所示:
- 使用
Test-Path或其他 cmdlet 检查文件是否存在。如果是,它将返回true。 - 使用逻辑运算符
-eq检查上述命令是否返回false。如果是这样,请使用Out-File或New-Itemcmdlet 创建该文件。
使用单行:
$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 引发异常。因此,如果文件已存在,命令行将不会显示输出。
