我在主文件夹中有几个子文件夹。每个子文件夹中都有一个.txt文件。首先,代码将在主文件夹中创建“results”文件夹。它将在每个.txt中搜索“Frequencies”字样并打印到新文件(在结果文件夹中)前三列,包括“Frequencies”字样。 当我第二次运行代码时,它应该删除结果文件。但是当我第二次运行它时出现以下错误。如何删除此目录(结果)及其内容? (首先运行时它会起作用)
错误:
Undefined subroutine &main::rmtree called at xxx.pl line 9.
代码:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Path qw/make_path/;
use Cwd;
my $dir = cwd();
my $check_result_file = "$dir/results/";
rmtree($check_result_file);
答案 0 :(得分:2)
use File::Path qw/make_path/;
告诉File :: Path导出make_path
,覆盖正常导出的子列表(mkpath
和rmtree
)。如果您还想要导出rmtree
,则需要指定它。
use File::Path qw( make_path rmtree );
从技术上讲,您还可以使用以下内容:
use File::Path;
use File::Path qw( make_path );
但是,我认为明确列出所有子I导入是一个好习惯,所以我非常赞成我提供的第一个解决方案。
顺便说一下,make_path
的File :: Path版本也有remove_tree
。 remove_tree
首选rmtree
。
答案 1 :(得分:0)
您在use
行末尾错过了分号:
use File::Path;
^ add this
答案 2 :(得分:0)
两件事,首先,正如jwodder所提到的,你在使用线的末尾遗漏了一个分号:
use File::Path; <--
其次,在检查目录时,您希望使用-d而不是-e。 -d将检查目录是否存在,而-e将检查是否存在文件。您还需要检查条件。
if ( -d $check_folder)
{ //dostuff }
else
{ //do other stuff}
或unix变体(假设你先对文件夹进行了正确的检查)
my $result = system("rm -rf $check_folder);
答案 3 :(得分:0)
对于没有“ rm”的窗口,您可以在系统上执行。
$dir = "C:/somepath/path";
$del_directory = "\@RD /S /Q \"$dir\"";
$exec_del = `$del_directory`;