
いくつかのルールに基づいて名前を変更する必要があるフォルダーがたくさんあります。フォルダーの例:
-- Some.Folder.Name.Today.2009
-- Another.messed.Up.folder.1980
-- Third.messed.Up.folder.1980
各フォルダの名前を変更して、フォルダ名からドット(.)を削除し、年を括弧で囲む簡単なスクリプトがあるかどうか知りたいのですが、次のようになります。
-- Some Folder Name Today (2009)
-- Another messed Up folder (1980)
-- Third messed Up folder (1980)
どうもありがとう!
答え1
パールこれをうまく処理するには、次のようなもので十分でしょう:
use warnings;
use strict;
use File::Copy;
my $oldname;
opendir(my $d, ".") or die $!;
while(readdir $d) {
if (-d $_ and $_ ne "." and $_ ne "..")
{
$oldname = $_;
$_ =~ s/\./ /g;
$_ =~ s/(\d{4})/($1)/g;
move($oldname,$_);
}
}
closedir $d;
簡単にテストしただけなので、自由に改造してください。決して完璧ではありません。急いでハックしました ;)
注記:現状では、フォルダー名が改変されたディレクトリ内から実行する必要があります。
C:\Users\John\Desktop\folders>ディレクトリ ドライブ C のボリュームにはラベルがありません。 ボリュームシリアル番号は 8888-1666 です C:\Users\John\Desktop\folders のディレクトリ 2011年1月29日午後7時14分。 2011/01/29 午後7時14分 2011/01/29 午後 07:07 some.folder.name.2008 2011/01/29 午後 07:07 some.folder.name.2009 2011/01/29 午後7時16分 282 ren.pl 1 ファイル 282 バイト 4 ディレクトリ 53,349,425,152 バイト空き C:\Users\John\Desktop\folders>ren.pl C:\Users\John\Desktop\folders>ディレクトリ ドライブ C のボリュームにはラベルがありません。 ボリュームシリアル番号は 8888-1666 です C:\Users\John\Desktop\folders のディレクトリ 2011年1月29日午後7時16分。 2011/01/29 午後7時16分 2011/01/29 07:07 PM フォルダ名 (2008) 2011/01/29 07:07 PM フォルダ名 (2009) 2011/01/29 午後7時16分 282 ren.pl 1 ファイル 282 バイト 4 ディレクトリ 53,349,425,152 バイト空き
答え2
短い sed スクリプトを使用してファイル名を実行することをお勧めします。for file in dir/with/files/*; do name=$(basename "$file" | sed 's/\./ /g;s/\([12][09][0-9][0-9]\)/(\1)/'); mv "$file" "$(dirname \"$file\")/$name"; done
ドットをスペースに置き換え、年を括弧で囲みます。
これらのファイルをスキャン/操作する場合は、適切に引用符で囲まれていることを確認してください。アイテム間の区切り文字としてスペースがよく使用されます。
答え3
でパワーシェル(Win7 ではデフォルトでインストールされていると思いますが、私は Windows マシンを持っていないので間違っているかもしれません)
gci *.* | %{
mi $_ ($_.name.replace('.', ' ').insert($_.name.lastindexof('.')+1, '(')+')')
}