Cygwin下的命令行参数中的反斜杠

时间:2015-05-27 19:05:58

标签: string perl

我在perl中作为命令行参数传递给文件的完整路径。 例如

myscript.pl C:\Dir\myfile.txt

在myscript.pl中,我有

my $full_path = shift;            
print $full_path;

当我这样做时,我的输出是

C:Dirmyfile.txt

我真正想要的是C:\Dir\myfile.txt 但是当我以

运行我的脚本时
myscript.pl 'C:\Dir\myfile.txt'

我的输出是C:/Dir/myfile.txt。现在它有正斜杠而不是反斜杠。我怎样才能得到我想要的东西? (与传入的内容相同,带有反斜杠的文件路径)

我需要运行能够在Windows环境中的 Cygwin 上运行此脚本。请注意,该脚本有更大的用途,但我发布的内容是我遇到的部分。路径是我从其他地方复制的东西,所以我真的不想做用正斜杠或空格替换反斜杠的额外工作。

1 个答案:

答案 0 :(得分:1)

使用File::Spec模块。这简化了将参数传递到脚本的过程,因为您不需要使用斜杠,它还使您的应用程序可以跨操作系统移植。

use File::Spec;

my $full_path = File::Spec->catfile(@ARGV);
print $full_path, "\n";

示例:

perl myscript.pl C: Dir myfile.txt
C:\Dir\myfile.txt

或者,如果您需要使用完整路径字符串,请使用以下代替上述代码:

my $full_path = File::Spec->canonpath($ARGV[0]);

示例2:

perl myscript.pl C:\Dir\myfile.txt

<强> - 或 -

perl myscript.pl C:/Dir/myfile.txt

C:\Dir\myfile.txt

示例3(对于Cygwin) - 带单引号的环绕参数:

perl myscript.pl 'C:\Dir\myfile.txt'
C:\Dir\myfile.txt