PowerShell Split-Path: Get the File Name from Path

powershell get file name from path

PowerShell is a powerful scripting language and automation framework developed by Microsoft. It provides a command-line interface that allows users to interact with their computer system, manage files and folders, and automate various tasks. When working with file paths, it often requires extracting the file name from the given path. This task can be accomplished using various methods and cmdlets available in PowerShell. In this comprehensive guide, we will explore different techniques to extract file names from paths in PowerShell while ensuring flexibility and efficiency.

Understanding File Paths

Before diving into the details of extracting file names from paths in PowerShell, it is crucial to have a clear understanding of the components that make up a file path. In PowerShell, a file path is a string that specifies the location of a file or folder in the file system. It consists of a drive letter (or UNC path), followed by a series of directory names separated by backslashes, and finally, the file name.

For example, consider the following file path: C:\folder\subfolder\filename.txt

  • C:\ represents the drive of the specified path.
  • Folder\subfolder represents the folder and its subfolders.
  • filename.txt is the name of the file.
  • .txt is the file extension.

Now that we have a basic understanding of file paths, let’s explore different methods to extract file names from paths in PowerShell.

Using the Split-Path Cmdlet

Extracting file names from paths is a common task in PowerShell scripting. It allows us to manipulate files based on their names, perform operations such as renaming, moving, or deleting files, and generate reports or perform analysis based on file names. One of the simplest and most commonly used cmdlets for extracting file names from paths in PowerShell is Split-Path. The Split-Path cmdlet allows us to retrieve specific parts of a given path, such as the file name or the parent folder. Here is the basic syntax and parameters:

Split-Path -Path <Path> [-Qualifier] [-NoQualifier] [-Parent] [-Leaf] [-Resolve] [-PassThru] [<CommonParameters>]

Here is the list of useful parameters of the split-path cmdlet.

ParameterDescription
PathThe path that you want to split
ParentThis parameter is used to return only the parent part of a path. For example, if you provide the path as C:\foo\bar.txt, Split-Path -Path C:\foo\bar.txt -Parent will return C:\foo
LeafThis parameter is used to return only the last item or the file name in the path
QualifierReturns only the Path portion of the path without the Drive or UNC server portion.
NoQualifierReturns only the Path portion without the Drive or UNC server portion.
LeafBaseReturns only the last element of the path without the extension. Please note, the LeafBase parameter is available only in PowerShell 6.0 and above.
ExtensionReturns only the leaf’s extension, available in PowerShell 6.0 and above.

To extract the file name from a path, we can use the -Leaf parameter with the Split-Path cmdlet. Here’s an example to get file name from path:

$path = "C:\folder\subfolder\filename.txt"

#GetFileName from path
$fileName = Split-Path -Path $path -Leaf

Write-Output $fileName

In this example, the Split-Path command takes the file path stored in $Path and returns only the last item (the leaf item) from the path, which is the file name “filename.txt”. The -Leaf parameter instructs the cmdlet to return only the leaf or last item. The result is stored in the $fileName variable. The Write-Output cmdlet is then used to display the file name. The variable $fileName will now contain the extracted file name from a single location.

PowerShell get File Name from Path

Similarly, you can get the file names from multiple paths as:

#Parameter with Multiple Paths
$Paths = "C:\Temp\AppLog.txt", "C:\Users\Salaudeen\Desktop\invoice.docx"

#Get File Name from Paths
$Paths | ForEach-Object { Split-Path -Path $_ -Leaf}

Extracting File Names Without Extensions

If you specifically need to extract the file name without the file extension, PowerShell provides another parameter called -LeafBase with the Split-Path cmdlet. This parameter is available in PowerShell 6.0 or later versions.

Here’s an example of extracting the file name without the extension:

$Path = "C:\folder\subfolder\filename.txt"
$fileNameWithoutExtension = Split-Path -Path $Path -LeafBase

The variable $fileNameWithoutExtension will now contain the file name without the extension, which, in this case, would be filename.

Using .NET Class Library Methods

Another approach to extracting file names from paths in PowerShell is by utilizing the .NET class library methods available in PowerShell. Specifically, the System.IO.Path class provides useful methods for working with file paths.

To extract the file name without the extension using the System.IO.Path class, we can use the GetFileNameWithoutExtension() method. Here’s an example:

$path = "C:\folder\subfolder\filename.txt"
$fileNameWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($path)

The variable $fileNameWithoutExtension will now store the file name without the extension, which would be filename.

Isolating the File Extension

Say, You want to categorize files based on their extensions, Here is how to get the file extension using Split-Path and Regular expressions:

$MediaFile = "C:\Media\Movies\movie.mkv"
$Extension = (Split-Path -Path $MediaFile -Leaf) -replace '^.+(\..+)$','$1'
Write-Output $Extension

The output will be:

.mkv

Using the Get-ChildItem cmdlet to retrieve File Names

One of the most commonly used cmdlets in PowerShell for working with files and directories is Get-ChildItem. This cmdlet retrieves a list of files and directories in a specified location. By default, it returns a collection of FileInfo and DirectoryInfo objects that contain information about the files and directories, including their names, sizes, creation dates, and more.

To retrieve file information using Get-ChildItem, you can specify the path to the directory you want to search in. For example, to retrieve a list of CSV files in the “C:\Temp” directory, you can use the following command using the wildcard operator:

Get-ChildItem -Path "C:\Temp" -File -Filter *.csv| Select -ExpandProperty Name

This command will return a list of file objects representing the files in the specified directory.

Get File Name PowerShell

Extracting Multiple File Names Without Extensions

In some cases, you may need to extract multiple file names without extensions from a given directory. PowerShell provides the Get-ChildItem cmdlet, which allows us to retrieve files from a specified path. We can then combine it with the System.IO.Path class method to extract the file names without extensions.

Here’s an example:

#Parameter
$DirectoryPath = "C:\Temp"

#Get All Files from the Directory
$Files = Get-ChildItem -Path $DirectoryPath -File

#Get Files without Extention
$FileNamesWithoutExtension = $Files | ForEach-Object {
    [System.IO.Path]::GetFileNameWithoutExtension($_.FullName)
}
$FileNamesWithoutExtension

The variable $fileNamesWithoutExtension will now contain an array of file names without extensions from the specified directory. Here is the output from PowerShell ISE:

Get File name from path powershell

Checking File and Folder Existence

Before extracting file names from paths in PowerShell, it is essential to ensure the existence of the files and folders. PowerShell provides the Test-Path cmdlet to check if a file or folder exists at a specified path.

Here’s an example of using Test-Path to check the existence of a file:

$path = "C:\folder\subfolder\filename.txt"
$fileExists = Test-Path -Path $path

if ($fileExists) {
    Write-Host "The file exists."
} else {
    Write-Host "The file does not exist."
}

Similarly, we can use Test-Path to check the existence of a folder:

$folderPath = "C:\folder\subfolder"
$folderExists = Test-Path -Path $folderPath

if ($folderExists) {
    Write-Host "The folder exists."
} else {
    Write-Host "The folder does not exist."
}

By using Test-Path before extracting file names, we can ensure that the path is valid and that the files or folders actually exist.

Best practices for working with file names and paths in PowerShell

When working with file names and paths in PowerShell, there are a few best practices to keep in mind:

  1. Always validate user input: When working with user-supplied file names or paths, make sure to validate and sanitize the input to prevent security vulnerabilities or unexpected behavior.
  2. Use error handling: When manipulating files and paths, errors can occur due to various reasons, such as file permissions or network issues. Use appropriate error-handling techniques, such as try and catch, to handle these errors gracefully.
  3. Handle edge cases: Be aware of edge cases, such as files with special characters or long file paths, which can cause issues when working with file names and paths. Use appropriate techniques, such as escaping special characters or using alternative methods for long paths.
  4. Test your scripts: Before deploying scripts that manipulate file names or paths in a production environment, thoroughly test them in a controlled environment to ensure they work as expected and handle all possible scenarios.

Conclusion

Extracting file names from paths is a common task in PowerShell. In this article, we explored how to extract file names from paths with ease using PowerShell. We learned about the importance of extracting file names, utilizing the Split-Path cmdlet and the System.IO.Path class methods, the Get-ChildItem cmdlet, to easily extract file names with or without extensions. Additionally, the Test-Path cmdlet allows us to verify the existence of files and folders before performing any operations.

Remember to adapt these techniques to your specific requirements and integrate them into your PowerShell scripts for efficient file management and automation.

Now that you have a solid understanding of how to extract file names from paths in PowerShell, you can confidently handle file operations and streamline your workflow.

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

Leave a Reply

Your email address will not be published. Required fields are marked *