我需要从传递给 Perl 脚本的路径中获取目录名称作为运行时参数。这是我正在使用的代码:
$command ="cd $ARGV[0]";
system($command);
$command="dir /ad /b";
system($command);
@files=`$command`;
但它仍会返回运行此 Perl 脚本的目录中的目录名称。简而言之,如何从路径传递给此 Perl 脚本的目标目录中获取目录名称?
我需要从传递给 Perl 脚本的路径中获取目录名称作为运行时参数。这是我正在使用的代码:
$command ="cd $ARGV[0]";
system($command);
$command="dir /ad /b";
system($command);
@files=`$command`;
但它仍会返回运行此 Perl 脚本的目录中的目录名称。简而言之,如何从路径传递给此 Perl 脚本的目标目录中获取目录名称?
从您在问题帖子中尝试做的事情来看
$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
)
您的问题是通过“系统”运行“cd”不会更改 perl 进程的工作目录。为此,请使用“chdir”函数:
chdir($ARGV[0]);
$command="dir /ad /b";
system($command);
@files=`$command`;
这也应该有效
$command = "dir /ad /b $ARGV[0]" ;
使用File::DosGlob(自 perl v5.5 之前的核心)来避免像跳过匹配 /^\./ 的文件这样的陷阱。
perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"