我需要从传递给Perl脚本的路径中获取目录名作为运行时参数。 这是我正在使用的代码:
$command ="cd $ARGV[0]";
system($command);
$command="dir /ad /b";
system($command);
@files=`$command`;
但它仍然返回我正在运行此Perl脚本的目录中的目录名称。 简而言之,如何从路径传递给此Perl脚本的目标目录中获取目录名称?
答案 0 :(得分:9)
根据你在问题帖子中的意图来判断
$dir = $ARGV[0];
chdir($dir);
while(<*>){
chomp;
# check for directory;
if ( -d $_ ) {
print "$_\n" ;
}
}
在命令行上
c:\test> perl myscript.pl c:\test
还有其他方法可以列出目录。请参阅文档
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} <*>"