批处理文件重命名多个文件夹中的文件

问题描述:

我有如下所示的文件夹和文件结构。我需要一个MS DOS批处理文件来重命名多个文件夹中的文件。任何人都可以请帮忙吗? TIA。批处理文件重命名多个文件夹中的文件

- 主文件夹

-->Sub Folder1 
    --- File1_EN.txt 
    --- File2_EN.txt 

--> Sub Folder2 
    --- File3_EN.txt 
    --- File4_EN.txt 

我想在文件名称为 “ENU” 重命名后缀 “EN”。

+0

你有没有看着http://stackoverflow.com/questions/717171/ recursive-renaming-file-names-folder-names-with-a-batch-file – Ali 2013-04-23 06:18:20

@echo off 
for /D %%d in (*) do (
    ren "%%d\File*_EN.txt" "File*_ENU.txt" 
) 

您可以通过这种方式做到这一点:

@Echo OFF 

Set "Folder=C:\Users\Administrador\Desktop\Nueva carpeta" 
Set "Suffix=_EN" 
Set "Replace=_ENU" 
Set "RegEx=\".*%Suffix%\"$" 

FOR /R "%Folder%" %%# in ("*") DO (
    (Echo "%%~n#"| FINDSTR /I "%RegEx%" 1>NUL) && (
    Set "NewFileName=%%~nx#" 
    Call Set "NewFileName=%%NewFileName:%Suffix%=%Replace%%%" 
    Call Echo [+] Renaming: "%%~nx#" "%%NewFileName%%" 
    Ren "%%#" "%%NewFileName%%" 
    ) 
) 

Pause&Exit 

的Findstr工具是确保匹配的字符串是一个后缀,比做一个子或“_”字符分割文件名权要好。

试试这个:

ren folder1\file*.txt file*_enu.txt 
ren folder2\file*.txt file*_enu.txt 
+0

只有当新名称大于原始名称时,您的方法才有效。如果新名称更短,则失败... – Aacini 2013-04-23 15:19:26

+0

我总是针对OP的特定问题发布解决方案。批量作为脚本语言永远无法回答一个案例的所有可想象的问题。[通配符如何在MS-DOS中工作?](http://blogs.msdn.com/b/oldnewthing/archive/2007/12/17/ 6785519.aspx)这也适用:'ren file * .txt file * e.txt',新文件名是'file?_e.txt'。 – Endoro 2013-04-23 16:40:20

+2

是的,我曾经这么做过:)我的评论不是对你的回答的批评,而是一个解释性说明,如果有人认为他们可能会用同样的方法来创建一个新的短名字...... – Aacini 2013-04-23 22:07:55

如果希望所有子文件夹被改变用途:

for /f "delims=*" %a in ('dir File*_EN.txt /b /s') do ren "%a" File*_ENU.txt