我正在将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.
您正在引用整个命令,包括命令行参数.你应该把你的第二个转义报价放在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)
)
| 归档时间: |
|
| 查看次数: |
11200 次 |
| 最近记录: |