分享脚本工具
m24h 2021-12-23原创 软件综合

1.使用正则表达式对目录下(或及子目录下的文件进行重命名), 需要安装perl, 文件名为XXXXXXXXXt

用法:

Usage:  [-itrd] <old file name to match> <new name to apply>
 rename files use regular express
 i:ignore case
 t:test only
 r:recur subdir
 d:change directory name only
 a:add number when conflicted

脚本:

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!perl
#line 15

local ($OLD,$NEW,$I,$T,$R,$A,$D);

sub getfiles($)
{
    my $dir=shift;
    my $f;
    my @file=();
    my @subdir;
    my $t;

    opendir ($f, $dir) || die "can't opendir $dir: $!\n";
    @subdir=grep { !/^\.$/ && !/^\.\.$/ } readdir($f);
    closedir $f;

    foreach $t(@subdir) {
        if (-d "$dir/$t") {
            push @file, getfiles("$dir/$t") if ($R);
            push @file, "$dir/$t" if ($D);
        } elsif (-f "$dir/$t") {
            push @file, "$dir/$t" unless ($D);
        }
    }

    return @file;
}

sub init()
{
	my $arg;
	while (defined($arg=shift @ARGV)) {
	    if (substr($arg,0,1) eq '-') {
	   		$T=1 if ($arg=~/t/);
	        $I=1 if ($arg=~/i/);
	        $R=1 if ($arg=~/r/);
	        $A=1 if ($arg=~/a/);
	       	$D=1 if ($arg=~/d/);
	    }  elsif (not defined $OLD) {
	        $OLD=$arg;
	    }  elsif (not defined $NEW) {
	        $NEW=$arg;
	    }
	}
	
	die "Usage: $0 [-itrd] <old file name to match> <new name to apply>\n rename files use regular express\n i:ignore case\n t:test only\n r:recur subdir\n d:change directory name only\n a:add number when conflicted\n"
		if (!defined($OLD) || !defined($NEW) || $OLD eq "")
}

sub ren($) 
{
	my $f=shift;
	my $d='';
	if ($f=~/^(.*[\\\/])([^\\\/]*)$/) {
		$d=$1 || '';
		$f=$2;
	}
	
	eval "\$f=~s/$OLD/$NEW/g".($I?'i':'').';';
    die "$@" if ($@);
	return $d.$f;
} 

sub addnum($$)
{
	my ($f,$i)=@_;
	$f=~s/(\.[^\\\/\.]*)?$/ ($i)$1/;
	return $f;
}

init();
my %chg;
my %all;
foreach (getfiles('.')) {
	$all{$_}='original in directory';
	my $d=ren($_);
	next if ($d eq $_);
	if (exists $all{$d}) {
		if ($A) {
			my $i=1;
			my $n;
			$i++ while (exists $all{addnum($d,$i)});
			$d=addnum($d,$i);
		} else {
			die "name conflicted when change '$_' -> '$d' ($all{$d})\n";
		}
	}
	$chg{$_}=$d;
	delete $all{$_};
	$all{$d}="renamed from '$_'";
}	
my $failed=0;
my $total=0;
foreach (keys %chg) {
    print "$_\n -> $chg{$_}\n";
    $total++;
    unless ($T) {
    	eval {$failed++ unless (rename $_,$chg{$_});};
        print "$@\n";
    } 
}
print STDERR "total:$total, failed:$failed\n"; 

exit 0;

__END__
:endofperl


来自:计算机科学 / 软件综合
1
m24h 作者
5个月5天前
1楼

2.根据(包括子目录里面的)照片exif时间对照片重命名和排序 需要安装perl和Image::ExifTool

Usage: photoname.bat <dir>
rename .jpg files to YYYYMMDD-###-where-what [.jpg/tiff/tiff/dng/nef], sub-folders is included
@REM ='
@perl -x -S %0 %*
@goto endofperl
@REM ';
#!perl
use Image::ExifTool qw(:Public);

die "Usage: photoname.pl <dir>\nrename .jpg files to YYYYMMDD-###-where-what [.jpg/tiff/tiff/dng/nef], sub-folders is included\n" if ($#ARGV<0);

sub getfiles($)
{
    my $dir=shift;
    my $F;
    my @file=();
    my @subdir;
    my $t;

    opendir ($F, $dir) || die "can't opendir $dir: $!";
    @subdir=grep { !/^\.$/ && !/^\.\.$/ } readdir($F);
    closedir $F;

    foreach $t(@subdir) {
        if (-d "$dir/$t") {
            push @file, getfiles("$dir/$t") ;
        }
        elsif ($t=~/\.(jpg)|(tif)|(tiff)|(dng)|(nef)$/i && -f "$dir/$t") {
            push @file, "$dir/$t";
        }
    }

    return @file;
}

local %NUM;
sub getindex($)
{
	my $d=shift;
	$NUM{$d}=0 unless exists($NUM{$d}); 
      $NUM{$d}=$NUM{$d}+1;
      return sprintf("%03d",$NUM{$d});	
}

my %newname;
my $t;
my $f;
my $exif;
foreach $f (getfiles($ARGV[0])) {
	if ($f=~/^(.*[\\\/])?(\d\d\d\d\d\d\d\d)\-(\d\d\d)\-(.*)(\.[^.]+)$/i) {
		$newname{$2.'-000000-'.$3.'-'.$f}=[$f,$1,$2,$4,lc($5)];
	} elsif ($f=~/^(.*[\\\/])?(\d\d\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D(\d\d)(.*)(\.[^.]+)$/i) {
		$newname{$2.$3.$4.'-'.$5.$6.$7.'-000-'.$f}=[$f,$1,$2.$3.$4,$8,lc($9)];
	} elsif ($f=~/^(.*[\\\/])?(.*)(\.[^.]+)$/i) {
		my ($t1,$t2,$t3)=($1,$2,$3);
		$exif=ImageInfo($f);
#		$t=$exif->{'GPSTimeStamp'};
#		if ($t=~/^(\d\d\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D*$/) {
#			$newname{$1.$2.$3.'-'.$4.$5.$6.'-000-'.$f}=[$f,$t1,$1.$2.$3,$t2,lc($t3)];
#			next;
#		}
		
		$t=$exif->{'DateTimeOriginal'};
		if ($t=~/^(\d\d\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D(\d\d)\D*$/) {
			$newname{$1.$2.$3.'-'.$4.$5.$6.'-000-'.$f}=[$f,$t1,$1.$2.$3,$t2,lc($t3)];
			next;
		} 
		
		print "can't get EXIF of $f\n";
	}  else {
		print "bad $f\n";
	}
}	

for my $k(sort keys %newname) {
	$t=$newname{$k};
	$f=$t->[1].$t->[2].'-'.getindex($t->[2]).'-'.$t->[3].$t->[4];
	next if (lc($f) eq lc($t->[0]));
	print ($t->[0],'->',$f,"\n");
	if (-f $f) {
    	print "File name exists: $f\n";
    }
    else {
        eval {rename $t->[0],$f;};
        print "$@\n";
    }
}

__END__
:endofperl


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
m24h
进士 机友
文章
23
回复
496
学术分
0
2020/01/22注册,12 小时前活动

无聊地过着没有意义的日子 偶尔期待一点意思

文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也