环境, Active Perl for Win32
执行脚本开始循环读取剪切板待命,这时选中一批文件,然后Control+C ,即可实现对文件批量按序号命名。
默认是001 002 003 + .扩展名 如果使用命令行带参数调用,则用第一个参数作为前缀,
比如
───────────┐
Terminal>rn.pl PIC- │
───────────┘
则对读取到的文件列表命名为 PIC-编号.扩展名 的形式 还有很多可以完善的地方。执行后生成一个:repair_fname.pl
可以用于恢复最近一次修改的文件名。- use strict;
- use Encode;
- use Win32::Clipboard;
- use File::Basename qw/dirname basename/;
- use IO::Handle;
- use Time::HiRes 'sleep';
- STDOUT->autoflush(1);
-
- my $clip;
- our @files;
- $clip = Win32::Clipboard();
-
- $clip->Empty();
- while (scalar(@files) <= 1) {
- @files = $clip->GetFiles();
- print ".";
- sleep 0.5;
- }
- print "Got it! \n";
- &deal();
-
- sub deal {
- open WRT, ">:raw", dirname(__FILE__)."\\repair_fname.pl" or die "WHAT? $!";
- our @files;
- my $i;
- my $path_and_name;
- my $left = "";
- $left = shift @ARGV if (defined $ARGV[0]);
- $i = 0;
- foreach (@files) {
- if (! -e $_) {
- print "File not exists!\n";
- last;
- }
- $i++;
- /\.(.{1,3})$/;
- $path_and_name = sprintf(
- "%s\\%s%03d.%s",
- dirname($_), $left, $i, $1
- );
- if (-e $path_and_name) {
- print "WARNNING: The same file name does exists!\n";
- last;
- }
-
- print WRT "rename(\'$path_and_name\', \'$_\');" . "\r\n";
- print basename($_), " => ", basename($path_and_name) ,"\n";
- rename ($_, $path_and_name) or warn "$!";
- }
- close WRT;
- }
复制代码
|