How to Change Directory in PowerShell?

As a PowerShell user, understanding how to navigate and change directories is essential to the efficient use of the tool. One of the most fundamental commands in PowerShell is the Change Directory (CD) command, which allows you to change the current working directory in the PowerShell console. In this comprehensive guide, I will take you step-by-step through how to use the PowerShell Change Directory command, from basic navigation to advanced techniques.

Introduction to PowerShell Change Directory

Before diving into the specifics of the CD command, it’s important to understand what a working directory is and why it matters. A working directory is the current location in the file system where PowerShell commands are executed. By default, PowerShell sets the working directory to the user’s home directory (If you launch PowerShell as administrator, you’ll be taken into “C:\Windows\System32” by default!). However, you can change the working directory using the CD command.

The CD command is an alias of the Set-Location cmdlet used to navigate through the file system and change the working directory. It takes a directory name as an argument and changes the working directory to that directory. We can use either relative or absolute path names as arguments to navigate to a specific directory.

How to change the Directory in PowerShell?

To change the current directory in PowerShell, you can use the Set-Location cmdlet, also known as the cd alias. Here is how to CD in PowerShell:

To start using the CD command, you first need to open the PowerShell console. Once you have the console open, type the CD command followed by the name of the directory you want to navigate to. For example, to navigate to the directory named “Documents”, type:

CD Documents

If the directory name contains spaces, you can enclose the folder name in double quotes like this:

CD "My Documents"

Changing to a parent directory

To navigate to the parent directory of the current working directory, you can use the double-dot (..) notation, like this:

CD..

Similarly, Instead of moving one level up, you can move two levels by appending a backslash (\) at the end of each.

cd ..\..\

To reach the root drive, use:

 Set-location \

This will set the current working directory to the root drive, such as “C:\”.

Changing to a child directory

Similarly, you can navigate to a child directory by specifying its name after the current working directory path. For example, if you are in the “Documents” folder and want to switch to a subfolder called “Reports,” you can use the following command:

cd .\Reports

The dot (.) represents the current working directory, and we use the backslash (\) as the directory separator. When you execute this command, you change the current working directory to the “Reports” folder.

PowerShell to Navigate to a Folder

To change the directory in PowerShell, you need to provide the path to the desired folder. This path can be either an absolute path (starting from the root of the file system) or a relative path (relative to the current working directory). You can use an absolute path to navigate to a specific folder. An absolute path specifies the entire path from the root directory to the target directory. For example, to navigate to the “Documents” directory on the C: drive, type:

CD C:\Users\username\Documents

Changing to any other folder is possible with Set-Location by passing the path parameter to it:

Set-Location -Path C:\Scripts

You can also use relative paths to navigate to a directory. A relative path specifies the path from the current working directory to the target directory. For example, to navigate to a directory named “Data” that is located in the “Documents” directory, you can use a relative path like this:

CD Documents\Data

Home Directory: You can also use the ~ symbol that represents the current user’s home directory. For example, to change to the “Documents” folder in the current user’s home directory, you can use the following command:

cd ~\Documents

In this command, the tilde (~) represents the current user’s home directory, and the backslash is used as the directory separator.

Auto-Completion: Similar to other shells, PowerShell supports auto-completion. Start typing the path and press Tab to complete folder or file names. This tab completion is especially useful when dealing with long directory names.

Using environment variables

PowerShell supports environment variables, which are placeholders that store information about the system environment. You can use environment variables to navigate to commonly used folders without specifying their complete paths. For example, to change to the current user’s home directory, you can use the following example:

cd $HOME

Here, the $HOME environment variable represents the current user’s home directory. Executing this command changes the current working directory to the home directory. Similarly, you can navigate to any path defined in the environment variables. E.g., Program Files, Desktop Folder, etc.

Set-Location ${env:ProgramFiles}

This changes the working directory to “C:\Program Files”.

Changing the drive in PowerShell

You can also use PowerShell to navigate through different drives on your computer. To navigate to a different drive, you can use the Set-Location cmdlet with the Drive parameter like this:

  1. Open the PowerShell console.
  2. Type the drive letter followed by a colon like this – D:
  3. Press Enter to change to the specified drive.
  4. You can now navigate through the file system on that drive using the CD command.

Similarly, you can navigate to a folder in another drive using:

Set-Location -Path D:\Scripts

#Also works: CD D:\Scripts
powershell change directory

In addition, add “-PassThru” parameter to return the path after PowerShell changed the current working directory. Changing to network drives is also possible. E.g.,

Set-Location \\Fileserver\Public

Setting the default working directory in PowerShell

The working directory is the location in the file system where PowerShell commands are executed. By default, PowerShell sets the working directory to the user’s home directory. However, you can change the working directory using the CD command. Setting a default directory in PowerShell is typically done by modifying the PowerShell profile. The profile is a script that runs every time you start a new PowerShell session. By defining a Change-Location command in this script, you can make PowerShell start in a directory of your choice every time. Here’s how to set the working directory in PowerShell by updating the user profile.

# Check if profile exists
if (-not (Test-Path $profile)) {
    # Create profile if it doesn't exist
    New-Item -Type File -Path $profile -Force
    Write-Host "Profile created at $profile" -ForegroundColor Green
} else {
    Write-Host "Profile already exists at $profile" -ForegroundColor Yellow
}

# Set the desired default directory
$DefaultDirectory = "C:\Scripts"

# Append the Change-Location command to the profile
Add-Content -Path $profile -Value "Change-Location $DefaultDirectory"
Write-Host "Default directory set to $defaultDirectory" -ForegroundColor Green

# Inform user to reload their profile or restart PowerShell
Write-Host "Please reload your profile or restart PowerShell for changes to take effect." -ForegroundColor Cyan

The working directory should now be set to the directory you specified.

Push-Location and Pop-Location

You can also the Push-Location cmdlet (alias pushd) to temporarily change to a different directory, and then use the Pop-Location cmdlet (alias popd) to return to the previous directory. This can be useful if you need to perform some tasks in a different directory and then return to the previous location when you are done.

For example:

# Change to the D:\Scripts directory 
Push-Location
D:\Scripts

# Perform some tasks here

# Return to the previous directory 
Pop-Location

Here is how it works:

PowerShell Push-Location

Viewing the Current Directory in PowerShell

 If you’re not sure which directory you’re currently in, you can use the command:

Get-Location

You can also use the alias “pwd” which stands for “print working directory” and will display the current directory path on the command line.

Setting the working directory to the script location in PowerShell

When writing PowerShell scripts, it is often necessary to ensure that the script’s working directory is set to the location where the script is executed from. This can be achieved using the Set-Location cmdlet, which is an alternative to the cd command.

To set the working directory to the script location, you can use the following command within your script:

Set-Location -LiteralPath $PSScriptRoot

Here, the $PSScriptRoot variable represents the path to the script’s location. By executing this command, the working directory will be set to the script’s location, allowing you to access files and folders relative to the script. You can also get the current path of the script using the automatic variable “$Script:MyInvocation.MyCommand.Path”. E.g.,

#Get path of your current directory location
$CurrentPath = Split-Path $Script:MyInvocation.MyCommand.Path -Parent

#Get Files and folders in current path
Dir $CurrentPath

Tips and tricks for using PowerShell Change Directory Effectively

Now that you know how to use the CD command to navigate through the file system in PowerShell, here are some tips and tricks to help you use it more effectively:

  • Use the Tab key to autocomplete the directory and file names. This saves you time and reduces the risk of typos.
  • Use the Up Arrow key to quickly recall and reuse previous commands.
  • Use the Push-Location command to save the current directory to a stack and navigate to a new directory. You can then use the Pop-Location command to return to the previous directory.
  • Use aliases: PowerShell provides aliases for common commands, including cd. You can use aliases to save typing time and streamline your workflow. For example, instead of typing cd, you can use the alias sl or chdir to change directories.
  • Use wildcard characters: PowerShell supports wildcard characters, such as * and ?, for pattern matching. You can use wildcard characters to navigate to folders or files with similar names. For example, to change to a folder that starts with “Proj” you can use the following command: “CD Proj*”.

In addition to the basic CD command, PowerShell provides several advanced techniques for changing directories. Here are some of the most useful techniques:

  • Use the Join-Path command to combine multiple path components into a single path.
  • Use the Resolve-Path command to resolve the full path of a file or directory, even if it contains relative path components.
  • Use the Split-Path command to split a path into its parent and child components.
  • Use the Test-Path command to test whether a file or directory exists at a specified path.

Common pitfalls and errors when changing directories in PowerShell

While changing directories in PowerShell, you may encounter some common pitfalls and errors. Understanding these pitfalls can help you avoid potential issues and troubleshoot problems effectively. Here are some common pitfalls to watch out for:

  1. Invalid characters: PowerShell has specific rules regarding valid characters in folders and file names. If a folder or file name contains invalid characters, you may encounter errors when attempting to change directories. Make sure to use valid characters and escape special characters, if necessary.
  2. Permissions issues: Some folders or files may have restricted permissions, preventing you from accessing or changing directories. Ensure you have the necessary permissions to navigate to the desired folders or files.
  3. Missing drives: If you attempt to change to a drive that does not exist or is not currently mounted, you will encounter errors. Make sure to verify the existence and availability of drives before attempting to change them.

Wrapping up

Navigating through the file system is an essential skill for any PowerShell user. The CD command is a fundamental tool for changing directories and setting the working directory in PowerShell. By following the step-by-step guide and tips provided in this guide, you can master the CD command and navigate through the file system with ease.

How do I change from C drive to D drive in PowerShell?

To change from the C drive to the D drive in PowerShell, you can use the “Set-Location” command followed by the path of the D drive. Here’s an example:
Set-Location D:

How do I change the directory in PowerShell when there is a space?

To change the directory in PowerShell, when there is a space in the path, you can enclose the path in double quotes (“”). For example, if the directory is “C:\Program Files”, you would use the command: cd “C:\Program Files”

How do I run a PowerShell script in a specific directory?

To run a PowerShell script in a specific directory, you can use the “Set-Location” cmdlet to navigate to the desired directory first. E.g., Set-Location -Path “C:\Scripts”. Once you are in the correct directory, you can use the .\ notation followed by the script’s filename to execute the script.
".\scriptname.ps1"

How do I change the default directory in PowerShell?

To change the default directory in PowerShell, you can create a PowerShell profile and set the default directory in it. For example, if you want to set the default directory to “C:\Scripts”, you would add “Set-Location C:\Scripts” in the profile file (Create one, if it doesn’t exist already: New-Item -path $profile -type file –force).

How do I navigate a directory in Windows PowerShell?

To navigate a directory in Windows PowerShell, you can use the “cd” command followed by the directory path. For example, to navigate to a directory called “Documents” located in your user profile, you would type “cd C:\Users\YourUsername\Documents”. You can also use the “ls” command to list the contents of a directory and the “cd ..” command to navigate up one level in the directory hierarchy.

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 *