代码之家  ›  专栏  ›  技术社区  ›  fixxxer

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

  •  0
  • fixxxer  · 技术社区  · 15 年前

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

    $command ="cd $ARGV[0]";
    system($command);
    
    $command="dir /ad /b";
    system($command);
    @files=`$command`;
    

    但它仍然返回运行这个Perl脚本的目录中的目录名。 简而言之,如何从目标目录中获取目录名,该目录的路径将传递给这个Perl脚本?

    4 回复  |  直到 15 年前
        1
  •  2
  •   sud03r    15 年前

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

        2
  •  9
  •   Sinan Ünür    15 年前

    从你的问题帖子里想做什么来判断

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

    在命令行上

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

    还有其他方法可以列出目录。从文档中查看这些

    1. perldoc -f opendir , perldoc -f readdir

    2. perldoc perlopentut

    3. perldoc -f glob

    4. perldoc perlfunc (查看操作员以获取测试文件。 -x , -d , -f 等)

        3
  •  2
  •   nobody    15 年前

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

    chdir($ARGV[0]);
    
    $command="dir /ad /b";
    system($command);
    @files=`$command`;
    
        4
  •  0
  •   Anonymous    15 年前

    使用 File::DosGlob (自Perlv5.5之前的内核)以避免类似gotchas的跳过匹配/^\./的文件。

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