Windows perl if(-e";带空格路径的窗口){}
我在Windows上:-/在我的脚本中:Windows perl if(-e";带空格路径的窗口){},windows,perl,path,executable,space,Windows,Perl,Path,Executable,Space,我在Windows上:-/在我的脚本中: $ENV{'Powmig Path'}powermt 这给了我: C:\Program\ Files\EMC\PowerPath\powermt 如果我执行if(-e$ENV{'Powmig Path'}powermt) 我试图用一些替代品来改变我的道路\/ 我还尝试添加更多双引号,但似乎没有任何效果:-( 例如: #!/usr/bin/perl use strict; use warnings; use File::Spec; if($^O =~
$ENV{'Powmig Path'}powermt
这给了我:
C:\Program\ Files\EMC\PowerPath\powermt
如果我执行if(-e$ENV{'Powmig Path'}powermt)
我试图用一些替代品来改变我的道路\/
我还尝试添加更多双引号,但似乎没有任何效果:-(
例如:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec;
if($^O =~ m/^MSWin32$/){
my $tmp = File::Spec->catdir($ENV{'Powmig Path'}, "powermt");
if(-e "\"$tmp\""){
print "powermt found\n";
}else{
print "No multipathing found \"$tmp\"\n";
}
$tmp =~ s/\\/\//g;
if(-e "\"$tmp\""){
print "powermt found\n";
}else{
print "No multipathing found \"$tmp\"\n";
}
}else{
print "Error: Unknow OS\n";
}
exit;
输出:
C:\Users\sgargasson\Desktop>perl test.pl
No multipathing found "C:\Program Files\EMC\PowerPath\powermt"
No multipathing found "C:/Program Files/EMC/PowerPath/powermt"
在尝试使用不同的文件后,问题出现在空间中
有人能帮我吗
Thx在Adv中,您确实意识到您不能只在源代码中键入字符串,对吗?您需要引用它:
print "$ENV{'Powmig Path'}powermt";
...
if (-e "$ENV{'Powmig Path'}powermt")
这将插入变量,在本例中是来自哈希%ENV
的哈希值,并将其与字符串powermt
连接起来
如果尝试将字符串连接到变量,则首先需要将其引用,然后使用将其附加到变量:
my $string = $ENV{'Powmig Path'} . "powermt";
# ^--- concatenation operator
但是,如果您试图构建路径,则可以使用适合该任务的模块,例如:
这里有一个问题:
if(-e "\"$tmp\""){
您有一组额外的引号。文件名不是“C:\Program Files\whatever”
,而是C:\Program Files\whatever
。只有在命令提示符或类似命令解释文件名时,您才需要这些额外的引号,这里不是这种情况
试试这个,我已经删除了多余的引号(“\“$tmp\”
变成了“$tmp”
,这与$tmp
完全相同):
非常感谢TLP
我真是个愚蠢的linux用户
问题:
my $tmp="$ENV{'Powmig Path'}powermt";
解决:
my $tmp="$ENV{'Powmig Path'}powermt.exe";
正确的代码是:
#!/usr/bin/perl
use strict;
use warnings;
if($^O =~ m/^MSWin32$/){
if(-e "$ENV{'Powmig Path'}powermt.exe"){
print "powermt found\n";
}else{
print "No multipathing found\n";
}
}else{
print "Error: Unknow OS\n";
}
exit;
我太蠢了,我需要取消选中“隐藏知道扩展”在这方面花了这么多时间…也许你应该包括你使用过的实际代码。我在windows中对有空格的路径进行文件测试
-e
没有问题。很可能你的问题只是你的代码出了问题。而且,永远,永远,永远,永远都不要包括近似代码。Always,始终包括您自己使用的代码,这些代码描述了您的确切问题。re:Edit:在更改字符串之前,您尚未对字符串执行-e
文件测试。两部分:1)您正在使用-x
文件测试。2) 您在更改字符串后正在进行文件测试。我直接尝试了-e和-x测试,并做了大量更改。没有区别:-(我试过使用concat和File::Spec,不是更好:-(这样做。使用Data::Dumper;$Data::Dumper::Useqq=1;print Dumper$path;system(“dir”,$path);
看看是否有任何隐藏的空格字符错误,看看shell是否可以用dir找到文件。我做$path=$ENV{'Powmig path'};输出:$VAR1=“C:\\Program Files\\EMC\\PowerPath\\”,在显示目录后,您的shell找不到该目录。如果您直接在shelldir“%Powmig Path%”中键入该目录,则在编辑之前粘贴的内容会显示“未找到文件”。
my $tmp="$ENV{'Powmig Path'}powermt.exe";
#!/usr/bin/perl
use strict;
use warnings;
if($^O =~ m/^MSWin32$/){
if(-e "$ENV{'Powmig Path'}powermt.exe"){
print "powermt found\n";
}else{
print "No multipathing found\n";
}
}else{
print "Error: Unknow OS\n";
}
exit;