Wednesday, March 23, 2011

How to escape command line arguments on Powershell?

It appears that I can escape command line arguments using single or double quotes:

PS C:\> echo Hello World
Hello
World
PS C:\> echo 'Hello World'
Hello World
PS C:\> echo "Hello World"
Hello World

But there's still something I can't figure out, which is when you wish to run an executable from a directory that contains a space in it:

PS C:\> c:\program files\test.exe
The term 'c:\program' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
At line:1 char:11
+ c:\program  <<<< files\test.exe
PS C:\> 'c:\program files\test.exe'
c:\program files\test.exe
PS C:\> "c:\program files\test.exe"
c:\program files\test.exe
PS C:\>

How do I get powershell to run the executable above?

From stackoverflow
  • Use this:

    . "c:\program files\test.exe"
    

    Actually an even better solution would be:

    Invoke-Item "c:\program files\test.exe"
    

    or using the alias:

    ii "c:\program files\test.exe"
    

    Using Invoke-Item means that the proper windows file handler would be used. So for an exe it would run it. For a .doc file for instance, it would open it in word.

    Here is one of the handiest PoSH command lines around. Give it a try:

    ii .
    
    Paul Hollingsworth : Brillant! Thanks
  • Try puttin an ampersand before the command. For example

    & 'C:\Program Files\winscp\winscp.exe'
    
  • I've also since discovered this very good page Understanding PowerShell Parsing Modes

0 comments:

Post a Comment