如何解决“--”运算符仅适用于变量或属性

abb*_*ood 2 mysql windows powershell escaping

我正在按照mysql 站点上的说明在 Windows 计算机上重置 mysql 服务器的密码。

逐字复制命令:

C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe"
     --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.0\\my.ini"
     --init-file=C:\\mysql-init.txt
Run Code Online (Sandbox Code Playgroud)

给我这个错误(缩写):

Unexpected token 'defaults-file="C:\Program Files\MySql\Mysql Server 5.0\my.ini"' 
in expression or statement.

The '--' operator works only on variables or on properties.

+ CategoryInfo          :ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId :UnexpectedToken
Run Code Online (Sandbox Code Playgroud)

我环顾四周,发现了这个建议:

尝试这个:

$cmd= {cmd /c 'C:\Program Files\PostgreSQL\8.3\bin\pg_dump.exe "--encoding=UTF8 --verbose --create --username=postgres -- file=C:\db\Wednesday .pg 数据库"'}

&$cmd

-- 是 Powershell 减量运算符。为了使其成为“mundate”,需要将其括在单引号中以抑制将其解析为运算符。您也可以用反引号转义所有连字符,但这会变得非常难看。

我尝试遵循该格式..即

$cmd = {cmd /c 'C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe
     "--defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.0\\my.ini
     --init-file=C:\\mysql-init.txt"'}
&$cmd
Run Code Online (Sandbox Code Playgroud)

但后来我得到了这个错误:

'C:\Program' is not recognised as an internal or external command
Run Code Online (Sandbox Code Playgroud)

我还尝试过进行反勾转义:

C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe"
     `-`-defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.0\\my.ini"
     `-`-init-file=C:\\mysql-init.txt
Run Code Online (Sandbox Code Playgroud)

但也出现错误(缩写):

unexpected token '`-`-defaults-file.. ' in expression or statement
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Com*_*ast 6

对于 Powershell 来说,用于停止参数处理的双破折号确实是一个可悲的选择。我尝试通过 Invoke-Command 让它工作,但下面的示例效果最好

&"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" '--defaults-file=""C:\Program Files\MySQL\MySQL Server 5.0\my.ini""' '--init-file="C:\mysql-init.txt"'
Run Code Online (Sandbox Code Playgroud)

双引号之间的可执行文件。

每个参数位于单引号之间,参数值位于双引号之间(或双双引号以使路径中的空格起作用)