2015-06-10 92 views
0

我有许多文件,我想重新排列名称。使用批处理脚本重新排序文件夹中的文件名

目前的文件名改为

XXX-YYYYY-ZZZ-A1B2C3 

我想重新排序A1B2C3到ABC123。

XXX-YYYYY-ZZZ-ABC123 

字符串的XYZ部分将每个文件可变的长度,所述A1B2C3将总是在字符串的末尾。

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

任何帮助非常感谢!

+0

是'A1B2C3'部分长度=六个字符_always_? – JosefZ

+0

是的,是正确的。 – swifty

+0

我使用Naru的Flexible Renamer工具获得了很好的结果(http://hp.vector.co.jp/authors/VA014830/english/FlexRena/)。它允许但不要求正则表达式,并在提交之前提供实时的GUI预览结果更改。如果您的需求一天改变,可能会有好处。 – user1016274

回答

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命令由*-*-*-*.*

+0

这更多的是我认为可能的,谢谢你。 该命令显示“ren”A1B2C3.xxx“”A1B2C3 ---〜0,1 ....〜5.1.xxx“' 我敢肯定这是一个简单的修复,我明白它是如何工作的,但不知道如何解决它:/ – swifty

+0

这些文件_必须根据您的规格具有'XXX-YYYYY-ZZZ-A1B2C3.ext'中的XXX,YYY,ZZZ部分! – Aacini

+0

太棒了,完美的作品。 :) – swifty

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 [email protected] if [email protected];                 
    rename($was, $_) unless $was eq $_;           
} 

:我没有写这个命名脚本 - 它已经在互联网踢多年)。

例如,从您的所有文件开始删除XXX-,你会怎么做:

~/bin/rename 's/^XXX-//' * 

正则表达式重命名A1B2C3ABC123留作练习为读者

+0

它适用于Windows;请参阅'batch-file'标签的说明:“批处理文件是一个文本文件,其中包含由DOS,OS/2或Microsoft Windows系统上的命令解释程序执行的一系列命令。” – Aacini

+0

我必须说我是一个完整的初学者,我在窗户上。我确实安装了批量重命名工具,它具有RegEx功能..是否可以使用此工具? (\ d {16}) - (\ d {1}) - (\ d {1}) - (\ d {1})之类的东西, - (\ d {1}) - (\ d {1}) - (\ d {1})/ $ 1- $ 2- $ 4- $ $ 6- 3- $ 5- $ 7 /; – swifty

+0

@Aacini做这个OP几乎肯定需要使用正则表达式;安装Perl将是实现这一点的一个简单方法。我将在将来关注标签:-) –

相关问题