【问题标题】:Renaming all files in the folder重命名文件夹中的所有文件
【发布时间】:2013-03-20 12:48:25
【问题描述】:
如何使用 Windows 批处理重命名文件夹中的所有文件?
基本上,名称中以_Done开头的部分应该去掉:
some_file_name_Done_34534576456.CSV -> some_file_name.CSV
some_other_file_name_Done_23232343.CSV -> some_other_file_name.CSV
【问题讨论】:
标签:
windows
for-loop
batch-file
cmd
directory
【解决方案1】:
试试这个,批量解决:
@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
编辑:将一些 ! 更改为 % 以进行澄清。这不会改变效果。
【解决方案2】:
如果您不介意使用其他语言,可以使用正则表达式重命名。这是您在 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();
}