Windows 重命名文件夹中的所有文件

Windows 重命名文件夹中的所有文件,windows,for-loop,batch-file,cmd,directory,Windows,For Loop,Batch File,Cmd,Directory,如何使用Windows批处理重命名文件夹中的所有文件? 基本上,名称中从\u Done开始的部分应该删除: some\u file\u name\u Done\u 34576456.CSV->some\u file\u name.CSV some_other_file_name_Done_23232343.CSV->some_other_file_name.CSV如果您不介意使用其他语言,可以使用正则表达式重命名。以下是您在JScript中要求的内容。将其另存为something.js,放入包含

如何使用Windows批处理重命名文件夹中的所有文件? 基本上,名称中从
\u Done
开始的部分应该删除:

some\u file\u name\u Done\u 34576456.CSV
->
some\u file\u name.CSV

some_other_file_name_Done_23232343.CSV
->
some_other_file_name.CSV

如果您不介意使用其他语言,可以使用正则表达式重命名。以下是您在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();
}

如果您不介意使用其他语言,可以使用正则表达式重命名。以下是您在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();
}

请尝试此解决方案,分批执行:

@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

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

请尝试此方法,分批使用:

@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

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

您可能会发现更直观。不幸的是,我无法使用第三方应用程序。您可能会发现更直观。不幸的是,我无法使用第三方应用程序。