使用批处理脚本重新排序文件夹中的文件名

时间:2015-06-10 00:12:06

标签: batch-file

我有很多文件,我想重新命名。

目前文件名读为

XXX-YYYYY-ZZZ-A1B2C3

我想将A1B2C3重新排序为ABC123。

XXX-YYYYY-ZZZ-ABC123

字符串的XYZ部分对于每个文件都是可变长度,A1B2C3将始终位于字符串的末尾。

能够批量处理当前文件夹中的所有文件是一个很好的起点,并且对当前文件夹和所有子目录中的所有文件进行批处理会更好。

非常感谢任何帮助!

2 个答案:

答案 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 *.*

  • 如果您还有其他不需要重命名的文件,您可以选择这些文件,在*.*

    中更改DIR命令中的*-*-*-*.*通配符