Escaping quotes and double quotes

后端 未结 3 1455
说谎
说谎 2020-11-29 04:11

How do I properly escape the quotes in the -param value in the following command line?

$cmd=\"\\\\server\\toto.exe -batch=B -param=\"sort1;parmt         


        
相关标签:
3条回答
  • 2020-11-29 04:39

    Using the backtick (`) works fine for me if I put them in the following places:

    $cmd="\\server\toto.exe -batch=B -param=`"sort1;parmtxt='Security ID=1234'`""
    

    $cmd returns as:

    \\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"
    

    Is that what you were looking for?

    The error PowerShell gave me referred to an unexpected token 'sort1', and that's how I determined where to put the backticks.

    The @' ... '@ syntax is called a "here string" and will return exactly what is entered. You can also use them to populate variables in the following fashion:

    $cmd=@'
    "\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
    '@
    

    The opening and closing symbols must be on their own line as shown above.

    0 讨论(0)
  • 2020-11-29 04:51

    Escaping parameters like that is usually source of frustration and feels a lot like a time wasted. I see you're on v2 so I would suggest using a technique that Joel "Jaykul" Bennet blogged about a while ago.

    Long story short: you just wrap your string with @' ... '@ :

    Start-Process \\server\toto.exe @'
    -batch=B -param="sort1;parmtxt='Security ID=1234'"
    '@
    

    (Mind that I assumed which quotes are needed, and which things you were attempting to escape.) If you want to work with the output, you may want to add the -NoNewWindow switch.

    BTW: this was so important issue that since v3 you can use --% to stop the PowerShell parser from doing anything with your parameters:

    \\server\toto.exe --% -batch=b -param="sort1;paramtxt='Security ID=1234'"
    

    ... should work fine there (with the same assumption).

    0 讨论(0)
  • 2020-11-29 05:05

    I found myself in a similar predicament today while trying to run a command through a Node.js module:

    I was using the PowerShell and trying to run:

    command -e 'func($a)'
    

    But with the extra symbols, PowerShell was mangling the arguments. To fix, I back-tick escaped double-quote marks:

    command -e `"func($a)`"
    
    0 讨论(0)
提交回复
热议问题