如何在Perl中正确使用带有参数空格的文件路径?

时间:2012-10-09 01:28:26

标签: perl

想要在'"E:\\Program Files (x86)\\Vim\\vim73\\gvim.exe -f " %s" "'打开一个文件,我正在Cannot find e:\Program

我需要做些什么才能让它发挥作用?

编辑:这是script我正在努力工作(这是完整的脚本,因为我还不熟悉perl,对不起)。当我通过chrome的TextAid向服务器发出POST请求时,它应该启动gvim。查看第38行

5 个答案:

答案 0 :(得分:1)

它是单个\双引用路径或使用反斜杠转义空格。

答案 1 :(得分:1)

system
   sprintf
      '"E:\\Program Files (x86)\\Vim\\vim73\\gvim.exe" -f "%s"',
      $file;

答案 2 :(得分:0)

我发现使用正斜杠更安全/更容易。

    my $file = 'C:/Program Files (x86)/Adobe/Reader 10.0/Reader/AcroRd32.exe' ;
    system $file ;

如果您需要参数cmmmond

    my $file = '"C:/Program Files (x86)/Adobe/Reader 10.0/Reader/AcroRd32.exe"' ;
    my $data = '"C:\working_dir/music/interim/a b.pdf"' ;
    system "$file $data" ;

使用单引号可以更轻松地嵌入双引号而无需逃避。

答案 3 :(得分:0)

解决这个问题的一种方法是搞乱报价和逃避。您需要确保将命令和命令的每个参数单独引用为单独的字符串。

此外,在win32上,您可以使用实际斜杠而不是反斜杠来创建目录分隔符。所以:

system( sprintf '"E:/Program Files (x86)/Vim/vim73/gvim.exe" -f "%s"', $file );

另一个更简单的选择是使用system()的参数列表。

第38行:

my @EDITOR_COMMAND = ( 'E:/Program Files (x86)/Vim/vim73/gvim.exe', '-f' );

第185/186行:

system( @EDITOR_COMMAND, $file );

然后所有讨厌的引用都会为你照顾。

答案 4 :(得分:0)

our $EDITOR_CMD = "'E:\\Program Files (x86)\\Vim\\vim73\\gvim.exe' -f %s";