Board logo

标题: [原创代码] Perl对剪贴板文件批量重命名 [打印本页]

作者: 523066680    时间: 2014-8-23 19:19     标题: Perl对剪贴板文件批量重命名

环境, Active Perl for Win32

  执行脚本开始循环读取剪切板待命,这时选中一批文件,然后Control+C ,即可实现对文件批量按序号命名。
默认是001 002 003 + .扩展名    如果使用命令行带参数调用,则用第一个参数作为前缀,
比如
───────────┐
Terminal>rn.pl PIC-   │
───────────┘

则对读取到的文件列表命名为 PIC-编号.扩展名 的形式 还有很多可以完善的地方。执行后生成一个:repair_fname.pl
可以用于恢复最近一次修改的文件名。
  1. use strict;
  2. use Encode;
  3. use Win32::Clipboard;
  4. use File::Basename qw/dirname basename/;
  5. use IO::Handle;
  6. use Time::HiRes 'sleep';
  7. STDOUT->autoflush(1);
  8. my $clip;
  9. our @files;
  10. $clip = Win32::Clipboard();
  11. $clip->Empty();
  12. while (scalar(@files) <= 1) {
  13.     @files = $clip->GetFiles();
  14.     print ".";
  15.     sleep 0.5;
  16. }
  17. print "Got it! \n";
  18. &deal();
  19. sub deal {
  20.     open WRT, ">:raw", dirname(__FILE__)."\\repair_fname.pl" or die "WHAT? $!";
  21.     our @files;
  22.     my $i;
  23.     my $path_and_name;
  24.     my $left = "";
  25.     $left = shift @ARGV if (defined $ARGV[0]);
  26.     $i = 0;
  27.     foreach (@files) {
  28.         if (! -e $_) {
  29.             print "File not exists!\n";
  30.             last;
  31.         }
  32.         $i++;
  33.         /\.(.{1,3})$/;
  34.         $path_and_name = sprintf(
  35.                 "%s\\%s%03d.%s",
  36.                 dirname($_), $left, $i, $1
  37.             );
  38.         if (-e $path_and_name) {
  39.             print "WARNNING: The same file name does exists!\n";
  40.             last;
  41.         }
  42.         print WRT "rename(\'$path_and_name\', \'$_\');" . "\r\n";
  43.         print basename($_), " => ", basename($path_and_name) ,"\n";
  44.         rename ($_, $path_and_name) or warn "$!";
  45.     }
  46.     close WRT;
  47. }
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2