如何在Windows上的Perl中访问带有空格的路径?

Kev*_*Kev 2 windows perl

我正在将Unix Perl脚本转换为在Windows上运行.我遇到了包含空格的路径的问题:

open (IN, "| C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe -u root -ppwd") or die "$!";
Run Code Online (Sandbox Code Playgroud)

上面的代码引发以下错误:

'C:\Program' is not recognized as an internal or external command,

我试着\"像这样逃脱包裹:

open (IN, "| \"C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe -u root -ppwd\"") or die "$!";
Run Code Online (Sandbox Code Playgroud)

但没有快乐.如何处理带空格的路径?

我正在使用为MSWin32-x86-multi-thread构建的ActiveState v5.10.0.

mob*_*mob 5

您正在引用整个命令,包括命令行参数.你应该把你的第二个转义报价放在mysql.exe:

open (IN, "| \"C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe\" -u root -ppwd") or die "$!";
Run Code Online (Sandbox Code Playgroud)

您可能还对qq()q()运算符感兴趣,它们允许您使用除引号之外的分隔符来分隔字符串.当您想引用包含引号的字符串时,它们非常有用:

qq[| "C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe" -u root -ppwd]
Run Code Online (Sandbox Code Playgroud)

此外,Perl将很乐意为命令名称处理正确的路径分隔符(但不总是为命令参数,所以要小心):

qq[| "C:/Program Files/MySQL/MySQL Server 5.1/bin/mysql.exe" -u root -ppwd]
Run Code Online (Sandbox Code Playgroud)

(并且由于此示例不需要任何插值,您可以使用单引号或q()构造:

'| "C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe" -u root -ppwd'
Run Code Online (Sandbox Code Playgroud)

)