如何在Perl中从DOS获取目录列表?

时间:2010-01-08 05:48:58

标签: perl dos external-process

我需要从传递给Perl脚本的路径中获取目录名作为运行时参数。 这是我正在使用的代码:

$command ="cd $ARGV[0]";
system($command);

$command="dir /ad /b";
system($command);
@files=`$command`;

但它仍然返回我正在运行此Perl脚本的目录中的目录名称。 简而言之,如何从路径传递给此Perl脚本的目标目录中获取目录名称?

4 个答案:

答案 0 :(得分:9)

根据你在问题帖子中的意图来判断

$dir = $ARGV[0];
chdir($dir);
while(<*>){
 chomp;
 # check for directory;
 if ( -d $_ ) {
    print "$_\n" ;
 }
}

在命令行上

c:\test> perl myscript.pl c:\test

还有其他方法可以列出目录。请参阅文档

  1. perldoc -f opendirperldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc(查看运营商的测试文件。-x-d-f等)

答案 1 :(得分:2)

您的问题是通过“system”运行“cd”不会更改perl进程的工作目录。为此,请使用“chdir”函数:

chdir($ARGV[0]);

$command="dir /ad /b";
system($command);
@files=`$command`;

答案 2 :(得分:2)

这也应该有效 $command = "dir /ad /b $ARGV[0]" ;

答案 3 :(得分:0)

使用File::DosGlob(自perl v5.5之前的核心版本)以避免像跳过匹配/^\././/的文件一样的问题。

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"