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

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

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

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

有帮助吗?

解决方案

这也应该工作结果 $command = "dir /ad /b $ARGV[0]" ;

其他提示

从您在问题帖子中尝试做的事情来看

$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 ETC)

您的问题是,运行“CD”通过“系统”不改变的Perl程序的工作目录。要做到这一点,使用 “CHDIR” 功能:

chdir($ARGV[0]);

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

使用文件:: DosGlob (因为Perl V5.5前芯)避免像跳过文件陷阱匹配/^\./.

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top