[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创代码] 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. }
复制代码

返回列表