2013-03-20 56 views
0

如何使用Windows批处理命名文件夹中的所有文件? 基本上,从_Done起名字的部分应被删除:重命名文件夹中的所有文件

some_file_name_Done_34534576456.CSV - >some_file_name.CSV some_other_file_name_Done_23232343.CSV - >some_other_file_name.CSV

+0

您可能会发现[Bulk Rename Here](http://www.bulkrenameutility.co.uk/Download.php)更直观。 – 2013-03-20 12:49:52

+0

不幸的是,我无法使用第三方应用程序。 – Peter17 2013-03-20 12:53:55

回答

2

试试这个,解决方案批次:

@echo off &setlocal enabledelayedexpansion 
FOR %%i in (*.*) do call:process "%%~i" 
GOTO :eof 

:process 
set "fname=%~n1" 
set "tname=%fname:*_Done=%" 
if "%fname%"=="%tname%" echo %~1: nothing to do&goto :eof 
set "fname=!fname:_Done%tname%=!%~x1" 
if exist "%fname%" echo %fname%: already exists&goto :eof 
ren "%~1" "%fname%" 
goto :eof 

endlocal 

编辑:改变了一些!%澄清。这不会改变效果。

+0

太棒了!谢谢! – Peter17 2013-03-20 13:42:23

1

如果你不介意使用另一种语言,你可以用正则表达式重命名。这是你在JScript中所要求的。将其另存为something.js,将其放入包含CSV文件的目录中,并使用cscript /nologo something.js运行它。

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var folder = fso.GetFolder("."); 

var files = new Enumerator(folder.Files); 

while (!files.atEnd()) { 
    var file = '' + files.item(); 
    if (/\.csv$/i.test(file)) { 
     var dest = file.replace(/_Done[^\.]+/i, ''); 
     if (dest != file) { 
      WSH.Echo('Renaming ' + file + ' -> ' + dest); 
      files.item().Move(dest); 
     } 
    } 
    files.moveNext(); 
} 
+0

谢谢,会检查出来 – Peter17 2013-03-20 13:30:04