2013-03-20 146 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