2017-06-18 52 views
0

我无法执行dir命令,我在指定文件名all.xml时发生错误,并且我无法使用/s命令进行搜索递归,我得到以下错误cannot access no such file exists并且不理解是/s参数是递归搜索,程序将其解释为文件路径无法从perl脚本传递参数到dir命令

use strict; 
use warnings; 
print "i"; 
my $vall = ` dir //server1/dxx/mxx/rxx/ "ui.xml" /s`; 

print $vall; 
+0

这是在Windows上吗?你可能需要反斜杠。 – simbabque

+0

@simbabque是windows,我不能写反斜杠,cmd中的cygwin工具要求我写相当于posix的命令时,我能够使用正斜杠列出rxx文件夹中的所有文件,但是我不能递归查找文件,因为'/ s'参数被解释为文件路径 – PopCorn

+0

将开关置于路径之前。 – simbabque

回答

1

这有什么做用Perl。您传递给dir的参数不正确。

  • dir解释/作为一个选项的开始,除非它的报价,
  • 你必须在不应该出现在路中间的空间,
  • /s不工作的路径包含/和一个文件组件。

此外,除了/s之外,您可能还需要/b

修正:

dir "\\server1\dxx\mxx\rxx\ui.xml" /s/b 

所以

my $dir_output = `dir "\\\\server1\\dxx\\mxx\\rxx\\ui.xml" /s/b`; 

例,

>dir "//localhost/C$/Users/ikegami/Desktop/" /s/b 
\\localhost\C$\Users\ikegami\Desktop\a.jpg 
\\localhost\C$\Users\ikegami\Desktop\cabinet.txt 
... 

>dir "//localhost/C$/Users/ikegami/Desktop/a.jpg" /s/b 
File Not Found            <-- WTF? 

>dir "\\localhost\C$\Users\ikegami\Desktop\a.jpg" /s/b 
\\localhost\C$\Users\ikegami\Desktop\a.jpg 
\\localhost\C$\Users\ikegami\Desktop\x\a.jpg 

>dir \\localhost\C$\Users\ikegami\Desktop\a.jpg /s/b 
\\localhost\C$\Users\ikegami\Desktop\a.jpg 
\\localhost\C$\Users\ikegami\Desktop\x\a.jpg 

>type a.pl 
print `dir \\\\localhost\\C\$\\Users\\ikegami\\Desktop\\a.jpg /s/b` 

>perl a.pl 
\\localhost\C$\Users\ikegami\Desktop\a.jpg 
\\localhost\C$\Users\ikegami\Desktop\x\a.jpg 

这么说,我会亲自使用File::Find::Rule

use File::Find::Rule qw(); 

my $qfns = 
    File::Find::Rule 
    ->name('ui.xml') 
    ->file 
    ->in('//server1/dxx/mxx/rxx'); 
+0

no'/ s'仍然被解释为路径'/ s:没有这样的文件或目录',并且'ui.xml'是一个文件,我正在尝试它在'rss'及其子目录中搜索 – PopCorn

+0

我试过命令,这是我得到的错误'cygwin警告: 检测到的MS-DOS样式路径:\ server1 \ dxx \ mxx \ rxx \ ui。xml l 首选的POSIX等价物是:/cygdrive/d/server1/dxx/mxx/rxx/ui.xml CYGWIN环境变量选项“nodosfilewarning”关闭此警告。 有关POSIX路径的更多详细信息,请参阅用户指南: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames dir:无法访问\\\\ server1 \\ dxx \\ mxx \\ rxx \\ ui.xml:N ○这样的文件或目录 dir:无法访问/ s:没有这样的文件或目录 dir:无法访问/ b:没有这样的文件或目录 – PopCorn

+0

但是当我尝试这个' 'dir“// server1/dxx/mxx/rxx /”/ s'我得到rxx下的所有目录并且'不能访问/ s:没有这样的目录','/ s'开关仍然被解释为路径 – PopCorn

相关问题