Table of Contents
Using the if-else
Statement
We can use the if-else
statement to create a file as follows:
Use the New-Item
Cmdlet
To create a file if it does not exist in PowerShell:
- Use the
Test-Path
cmdlet with theif
condition to check if the file exists. - Use the
New-Item
cmdlet to create a new file if it does not exist. - Print an error message in the
else
condition.
1 2 3 4 5 6 7 8 9 |
$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" } |
1 2 3 4 5 6 7 |
Directory: D:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 1/16/2023 4:19 PM 0 test.txt File 'D:\test.txt' created successfully |
The Test-Path cmdlet in PowerShell checks if a file or folder exists on the file system. The cmdlet returns a Boolean value based on whether or not the desired file exists. The basic syntax of this cmdlet is Test-Path -Path
, where the -Path
parameter specifies the path to the file or folder we want to check. It can be a relative or an absolute path.
The Test-Path
cmdlet can combine with other cmdlets, like the if
statement, to perform conditional operations on files or folders. It’s also possible to use it to check if a file exists. For example, we used it with the if
statement to check if the file
exists in the system.
If the file did not exist, we used the New-Item
cmdlet. The New-Item cmdlet creates new files, directories, symbolic links, junctions, hard links, registry keys, and variables in the file system or the registry. The cmdlet holds -Path
and -ItemType
as parameters. For example, we created a new file using this cmdlet.
In the else statement, if the file already exists, the program will display an error message on the console:
1 2 3 |
File 'D:\test.txt' already exists |
Use the Out-File
Cmdlet
To create a file if it does not exist in PowerShell, replace the New-Item
cmdlet of the above-discussed code with the Out-File
cmdlet.
1 2 3 4 5 6 7 8 9 |
$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" } |
1 2 3 |
File 'D:\test.txt' created successfully |
We discussed the Test-Path
cmdlet while explaining the code section for using the New-Item
cmdlet. In this section, we used the Out-File
cmdlet of PowerShell.
The Out-File cmdlet sends the output from a command to a file. It redirects the output of a command or script to a file rather than displaying it on the screen. It creates or overwrites the specified file and writes the output to the file, but to handle the overwriting, we can use the Test-Path
cmdlet that checks if the file exists.
For example, we used the Out-File
cmdlet to create a file providing the file
as the -Path
.
Replace the Test-Path
Cmdlet
We can replace the Test-Path
cmdlet inside the if
statement with any of these to check if the file exists:
- The Get-Item cmdlet retrieves information about an item in the file system, such as a file or a directory.
- The Get-ChildItem cmdlet in PowerShell retrieves information about the files and subdirectories in a directory.
- The Get-ItemProperty cmdlet gets properties of files, directories, or other items, depending on the item type and the provider that accesses the item.
[System.IO.File]::Exists()
is a method of theSystem.IO.File
class in PowerShell that checks if a file exists at the specified path.- The
dir
cmdlet is an alias of theGet-ChildItem
cmdlet.
Note that all these cmdlets require the -ErrorAction
parameter with the Ignore
value to eliminate all errors.
Using the try-catch
Statement
We can replace the if-else
statement of the above-mentioned code sections with the try-catch
block to create a file as follows:
Use the New-Item
Cmdlet
To create a file if it does not exist in PowerShell:
- Use the
try
statement to throw any error if the file already exists. - Use the
New-Item
cmdlet to create a new file in thetry
block. - Use the
catch
statement to handle the error thrown by printing an error message.
1 2 3 4 5 6 7 8 9 |
$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)" } |
1 2 3 4 5 6 7 |
Directory: D:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 1/16/2023 4:31 PM 0 test.txt File created successfully |
In PowerShell, the try-catch statement handles errors that may occur in a script.
- The
try
block contains the code that may throw an exception. - The
catch
block contains the code that will handle the exception if one appears.
If an exception appears in the try
block, it will throw the error to the catch
block, where the exception can be logged, displayed, or otherwise handled. The catch block can also specify different actions for different types of exceptions and can output the error message. It allows the script to continue running even if an error occurs rather than stopping execution.
For example, we used the try-catch
statement to create a file. The try
block contains the New-Item
cmdlet to create a new file at the specified path. The command created the file successfully if it did not exist. The catch block will be executed if an exception occurs, such as if the file already exists. It handed the System.IO.IOException and displayed an error message:
1 2 3 |
Error: The file 'D:\test.txt' already exists. |
Use the Out-File
Cmdlet
To create a file if it does not exist in PowerShell, replace the New-Item
cmdlet of the above-discussed code enclosed in the try
block with the Out-File
cmdlet.
1 2 3 4 5 6 7 8 9 |
$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)" } |
1 2 3 |
File created successfully |
The -NoClobber
switch in the Out-File
cmdlet prevents overwriting an existing file. When the -NoClobber
switch appears, if a file already exists at the specified file path, Out-File
will not create or overwrite the file and will return an error instead. This switch helps when we want to ensure that we don’t accidentally overwrite an important file.
For example, we used the -NoClobber
switch in the Out-File
cmdlet instead of bulky if-else
statements to create a file if it did not exist.
Using One-Liners
To create a file if it does not exist, use the one-liner as follows:
- Use the
Test-Path
or other cmdlets to check if the file exists. If it is, it will returntrue
. - Use the logical operator
-eq
to check if the above-mentioned command returnsfalse
. If so, use theOut-File
orNew-Item
cmdlet to create the file.
1 2 3 4 |
$file = "D:\test.txt" (Test-Path -Path $file) -eq $false | New-Item -ItemType File -Path $file -ErrorAction SilentlyContinue |
1 2 3 4 5 6 |
Directory: D:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 1/16/2023 4:48 PM 4 test.txt |
We can replace the Test-Path
cmdlet with Get-Item
or other cmdlets we discussed while explaining the code section for using the if-else
statement. Also, the Out-File
cmdlet can replace the New-Item
cmdlet. The main focus of this section is to write a one-line script that can create a file if it does not exist.
In PowerShell, -eq
is a logical operator that compares two values for equality. It returns $True
if the values are equal and $False
if they are not.
For example, we checked if the output of the Test-Path
cmdlet was equal to the False
value. If the file already exists, the Test-Path
cmdlet returns True
, and the comparison returns False
, but if the file does not exist, the Test-Path
cmdlet returns False
, and the comparison returns True
.
If the file did not exist, the script created the file using the New-Item
cmdlet. However, the-ErrorAction SilentlyContinue
switch prevented the New-Item
cmdlet from throwing an exception if the file already exists. As a result, the command line will not display output if the file already exists.