Nếu thư mục ./emails
của bạn có chứa những tập tin này:
1.msg
2.msg
3.msg
sau đó bạn @files
sẽ giống như thế ('.', '..', '1.msg', '2.msg', '3.msg')
nhưng rename
bạn muốn những cái tên như 'emails/1.msg'
, 'emails/2.msg'
, vv Vì vậy, bạn có thể chdir
trước khi đổi tên:
chdir('emails');
for (@files) {
#...
}
Có thể bạn muốn ch eck giá trị trả lại là chdir
.
Hoặc thêm tên thư mục mình:
rename('emails/' . $old, 'emails/' . $_) or print "Error renaming $old: $!\n";
# or rename("emails/$old", "emails/$_") if you like string interpolation
# or you could use map if you like map
Bạn có thể muốn kết hợp đọc thư mục của bạn và lọc sử dụng grep
:
my @files = grep { /^RE .+msg$/ } readdir(DIR);
hoặc ngay cả điều này:
opendir(DIR, 'emails') or die "Cannot open directory";
for (grep { /^RE .+msg$/ } readdir(DIR)) {
(my $new = $_) =~ s/^RE //;
rename("emails/$_", "emails/$new") or print "Error renaming $_ to $new: $!\n";
}
closedir(DIR);
Nguồn
2011-12-09 19:54:51
Nếu bạn in lỗi ($!), Bạn có thể nhận được một ý tưởng về những gì là sai ... – pilcrow
Cảm ơn bạn đã chỉ ra rằng. Lỗi là 'Không có tệp hoặc thư mục nào'. Tôi ngạc nhiên vì tên tập tin $ cũ là chính xác. – Johnathan1
Lưu ý rằng 'đổi tên' không được hỗ trợ đa nền tảng, trong khi chức năng' di chuyển 'Sao chép' của không có – Zaid