我有很多文件,我想重新命名。
目前文件名读为
XXX-YYYYY-ZZZ-A1B2C3
我想将A1B2C3重新排序为ABC123。
XXX-YYYYY-ZZZ-ABC123
字符串的XYZ部分对于每个文件都是可变长度,A1B2C3将始终位于字符串的末尾。
能够批量处理当前文件夹中的所有文件是一个很好的起点,并且对当前文件夹和所有子目录中的所有文件进行批处理会更好。
非常感谢任何帮助!
答案 0 :(得分:0)
您尚未提及您正在使用的操作系统。我假设你正在使用* nix(Linux,OSX,BSD等);在Windows上,您始终可以安装Perl和/或Cygwin。
使用以下重命名脚本,您可以编写Regular Expressions来重命名文件:
#!/usr/bin/perl -w
# rename - fix up file names
# examples:
# rename 's/\.orig$//' *.orig
# rename 'tr/A-Z/a-z/ unless /^Make/' *
# rename '$_ .= ".bad" *.f
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV)
{
$was = $_;
eval $op;
die $@ if $@;
rename($was, $_) unless $was eq $_;
}
(注意:我没有写这个重命名脚本 - 它已经在互联网上踢了很多年。)
例如,要从所有文件的开头删除 XXX - ,您可以执行以下操作:
~/bin/rename 's/^XXX-//' *
将 A1B2C3 重命名为 ABC123 的正则表达式留作读者练习。
答案 1 :(得分:0)
@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%f in ('dir /A-D /B *.*') do (
for /F "tokens=1-4 delims=-" %%a in ("%%~Nf") do (
set "last=%%d"
set "new=!last:~0,1!!last:~2,1!!last:~4,1!!last:~1,1!!last:~3,1!!last:~5,1!"
ECHO ren "%%f" "%%a-%%b-%%c-!new!%%~Xf"
)
)
输出示例:
C:\> test.bat
ren "XXX-YYYYY-ZZZ-A1B2C3.ext" "XXX-YYYYY-ZZZ-ABC123.ext"
ren "XXX-YYYYY-ZZZ-X9Y8Z7.ext" "XXX-YYYYY-ZZZ-XYZ987.ext"
关于此代码的一些观点:
您的描述对文件扩展名一无所知,所以我假设文件中有一个。如果没有,只需删除ECHO ren命令中的%%~Xf
部分。
最后一个命令只是在屏幕上显示 REN命令。如果REN命令看起来正确,则删除ECHO部分以便执行 REN。您也可以复制此行,以便在执行时查看REN命令。
要同时处理所有子目录,请以这种方式在DIR命令中添加/ S开关:dir /A-D /B /S *.*
如果您还有其他不需要重命名的文件,您可以选择这些文件,在*.*
*-*-*-*.*
通配符