How to Run BAT File From Powershell Script

Siddharth Bishnoi Feb 02, 2024
  1. Create and Run a PowerShell Script
  2. Run a Batch File From PowerShell Script
  3. Run a Batch file From PowerShell Script With Arguments
  4. Run Batch Commands From PowerShell
  5. Conclusion
How to Run BAT File From Powershell Script

A Batch file consists of a series of commands that execute line by line in a sequential manner. These Batch files are executed in cmd.exe, a command-line interpreter initially released for the Windows NT family.

Similarly, a PowerShell file is a text file consisting of a list of commands executed by the PowerShell command-line interface; it is saved with the .ps1 extension. It is the latest shell and scripting tool for Windows and a more advanced cmd version.

To run a .bat file from a PowerShell script, you can run it manually from the PowerShell. But, adding a .bat file to a PowerShell script to run it automatically without any user intervention may not sometimes run due to some minor mistakes that should be taken care of.

This article will illustrate different ways to run a Batch file from a PowerShell script.

Create and Run a PowerShell Script

To create a PowerShell script, open Notepad and add the commands to be executed. Save the file with the .ps1 extension to save it as a PowerShell file.

You can use any text editor to create a file.

Create a PowerShell Script

To run a PowerShell script, right-click on the PowerShell file and click on Run with PowerShell. You can also edit the file in PowerShell ISE.

Run a PowerShell Script

Run a Batch File From PowerShell Script

To run a .bat file from the PowerShell script, add the following line to the PowerShell script:

& .\testfile1.bat

Run a BAT File From PowerShell Script

But, this only works when testfolder is the relative path or when using the drive letter in the path. A more stable approach can be made.

For example, we have a .bat file named testfile.bat, which consists of commands which send the output to a text file named opt.txt. Add the Batch file to a PowerShell script to run automatically when the PowerShell script is being run.

Add the following line to the PowerShell script for running the Batch file:

cmd.exe /c 'testfile1.bat'

Run a BAT File From PowerShell Script Using CMD

Output:

Run a BAT File From PowerShell Script Output

Another way of running a Batch file from the PowerShell script is using the Start-Process cmdlet. To run the Batch file, add the following line of code to the PowerShell script:

Start-Process -FilePath 'C:\Users\Aastha Gas Harda\Desktop\testfile1.bat' -NoNewWindow

Run a BAT File From PowerShell Script Using Start-Process

Where:

  • -Filepath specifies the path of the Batch file.
  • -NoNewWindow starts the process in the current window.

To run the Batch file as administrator, add -verb runas in the above code:

Start-Process -FilePath 'C:\Users\Aastha Gas Harda\Desktop\testfile1.bat' -Verbose Runas -NoNewWindow

Run a BAT File From PowerShell Script as Administrator

This command is useful when your .bat file contains commands which require administrator privileges to run on execution.

Run a Batch file From PowerShell Script With Arguments

To run a Batch file from the PowerShell script that contains arguments, you can do so by using the -ArgumentList parameter and specifying each argument in an array of strings. By taking the above example, add the following line of code in the PowerShell script:

Start-Process -FilePath "cmd.exe" -ArgumentList @("/B", "/C", "`"", "^`"testfile1.bat^`"", "^`"$inputFilePath^`"", "`"") -NoNewWindow;

Run a BAT File From PowerShell Script With Arguments

Run Batch Commands From PowerShell

Rather than the Batch file, you can also execute Batch commands directly from the PowerShell script. Add the following line of code to execute the echo command to print the output as hello world.

Start-Process "cmd.exe" '/c echo helloworld' -NoNewWindow

Run CMD Commands Directly From PowerShell

Conclusion

So, we discussed how to run a Batch file from the PowerShell script in the safest way possible. We also discussed how to run Batch commands directly from the PowerShell instead of a PowerShell script without user intervention.