디렉토리에있는 파일의 목록을 다음 있습니다 :Windows의 Perl이 움라우트로 파일의 이름을 바꿀 수없는 이유는 무엇입니까?
- 01 년생 - 칭찬 - Kissed.flac
- 02 Wunschkind.flac 이에 it.flac
- 04 아래있어
- 03 Hole.flac
- 05 Wälsungenblut.flac
- ... N. 0N 파일 이름
# 예, 다음은 Oomph의 노래입니다!
펄에
및 다음 프로그램 :
디렉토리의 목록을 가져옵니다 및 번호 뒤에 점을 추가하여의 파일 이름을 변경use warnings;
use strict;
use utf8;
use open qw(:encoding(UTF-8) :std);
my @dirnames;
while ((my $dirname = <>) =~ /\S/) {
chomp($dirname);
push (@dirnames, $dirname);
}
foreach my $dirname (@dirnames) {
opendir (DIR, $dirname);
while (my $file = readdir(DIR)) {
if(length($file)>5) {
print $file , "\n";
my $newfile;
$newfile = substr($file, 0, 2);
$newfile .= '.';
$newfile .= substr($file, 2);
rename ($dirname . '\\' . $file, $dirname . '\\' . $newfile) or die $!;
}
}
closedir DIR;
}
.
프로그램이 모든 파일에서 올바르게 작동하지만 파일 이름에 움라우트가 포함 된 파일의 이름을 바꿀 때 Windows PowerShell과 명령 줄 모두 Permission denied
의 기능에 오류가 발생합니다.
이 문제를 해결하는 방법은 무엇입니까?
UPD. 소프트웨어 :
- 윈도우 8 64
- 은 ActiveState의 ActivePerl의 1601 (펄 5.16)
당신이 사용하는 데이터'의 출력을 제공시겠습니까 :: 덤퍼를; $ 데이터 :: 덤퍼 :: Useqq = 1; print (Dumper ($ file));'그래서 우리는 우리의 대답에 조금 집중할 수 있습니다. – ikegami
@ikegami 결과는 $ VAR1 = "01. Born - Praised - Kissed.flac"; 01. 출생 - 칭찬 - Kissed.flac $ VAR1 = "02 .. Wunschkind.flac"; 02 .. Wunschkind.flac $ VAR1 = "03 .. 너 그거야 .flac"; 03 .. 당신은 그것을 가지고 있습니다 .flac $ VAR1 = "04 ..이 구멍 아래로 .flac"; 04.이 구멍 아래로 .flac $ VAR1 = "05. W? lsungenblut.flac"; 05. W? lsungenblut.flac e : \ rename.pl 줄 20, <> 줄 2에서 사용 권한이 거부되었습니다. – llvk
아마도 '사용 권한이 거부되었습니다.' :) –