运行脚本时,我收到“找不到文件”的结果:
use File::Basename;
my @dirs = grep { fileparse($_) =~ /^[L|l]ib/ }
split /\n/, dir e:\\/ad/b/s;
print @dirs;
这是我的实际代码。我正在尝试grep
整个驱动器中名为 lib 或 Lib 的目录和子目录。
答案 0 :(得分:3)
如果您使用的是my answer to your previous question中的代码,我唯一能想到的是您的路径上可能有一些外部dir.exe
无法理解{{1}的命令行选项}内置cmd.exe
。例如,在我的路径中使用Cygwin的目录,我得到了
dir: cannot access /ad/b/s: No such file or directory
你也应该养成如果你想让人们能够显示 完全 输出的习惯可以更有效地帮助您。
为确保不会发生这种情况,请使用:
dir
注意反引号```。另请注意对正在使用的模式的更正。
答案 1 :(得分:2)
任何事情。
split
,因为它会以列表的形式返回。[L|l]
意味着你的意思。如果您只是表示大写“L”或小写“l”,则不需要替换符号。正确的表达式是[Ll]
(或(?i:l)ib
,这意味着我们将该组的i-flag本地化。)所以如果它看起来像这样:
use File::Basename;
my @dirs = grep { fileparse($_) =~ /^[Ll]ib/ } qx{dir /AD /B /S e:\\};
这应该有用,如果有任何匹配的话。只需确保使用qx
运算符或反引号。