如何使用批处理文件将文件夹中的文件重命名为foldername

时间:2013-04-28 19:35:03

标签: file batch-file rename move directory


你们中的任何人都可以帮我解决一个问题吗?我有很多同名的文件,放在sperate文件夹中 文件夹以数字命名,但里面的文件名为index.XXXX - 其中XXXX可以是.jpg或.html或.pdf。
我想制作一个'计划'可以重命名所有'索引'文件与其所在文件夹的名称相同。
文件夹以6位数字命名 - 全部不同。
在希望完成之后,我想将所有重命名的文件移动到一个新的单个文件夹,这样我就可以更容易地看到整个内容。
期待阅读您的答案。

4 个答案:

答案 0 :(得分:7)

@Echo OFF

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    FOR %%@ in ("index*") DO (
        Echo Ren: ".\%%~n#\%%@" "%%~n#%%~x@"
        Ren "%%@" "%%~n#%%~x@"
    )
    POPD
)

Pause&Exit

经过测试的文件夹结构:

C:\Users\Administrador\Desktop\Nueva carpeta (3)\123321
C:\Users\Administrador\Desktop\Nueva carpeta (3)\123321\Index.txt

C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456
C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456\Index.php

C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456\000000
C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456\000000\Index.css

C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321
C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321\Index.html

C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321\666999
C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321\666999\Index.jpg

<强>输出:

Ren: ".\123321\Index.txt"      "123321.txt"
Ren: ".\123456\Index.php"      "123456.php"
Ren: ".\654321\Index.html"     "654321.html"
Ren: ".\000000\Index.css"      "000000.css"
Ren: ".\666999\Index.jpg"      "666999.jpg"

答案 1 :(得分:3)

如果您希望GUI执行上述所有操作,请使用Bulk File Rename

打开它,浏览到您的文件夹。现在,检查选择标签中的子文件夹选项。将列出文件夹下的所有文件。在浏览器中选择文件。

文件标签中,将第一个选项从保留切换为删除。然后转到附加文件夹名称标签,并为属性名称设置选项前缀。单击重命名以完成。

这样做的好处是它可以预览你的文件将被重命名为什么。

答案 2 :(得分:1)

我同意Brandon的说法,批量文件重命名(http://www.bulkrenameutility.co.uk/)是在Windows下使用目录名重命名/后缀文件的好方法。

要将所有重命名的文件复制到公共目录,请使用Windows资源管理器搜索带有通配符的所有文件名(例如,readme * .txt)。然后选择所有找到的文件,选择复制,导航到目标目录,然后粘贴。

答案 3 :(得分:0)

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET startfrom=c:\sourcedir
SET destdir=c:\destdir
FOR /f "delims=" %%i IN ('dir /s /b "%startfrom%\index.*"') DO (
 FOR %%e IN (jpg html pdf) DO IF /i .%%e==%%~xi (
  FOR %%d IN ("%%~dpi.") DO (
   SET "var=%%~nxd"
   IF "!var:~6!"=="" (
    SET "var="
    SET /a var=1%%~nxd 2>NUL
    IF DEFINED var IF !var! geq 1000000 IF !var! leq 1999999 (
     ECHO MOVE "%%i" "%destdir%\%%~nxd%%~xi"
    )
   )
  )
 )
)
  • 获取'index。*'文件
  • 过滤指定的扩展程序
  • 找到直接目录名称
  • 检查它是否不超过6个字符
  • 尝试set变量为1000000..1999999(如果是6位数名称)
  • 如果成功ECHO移动命令(删除ECHO关键字以执行移动)

带注释的测试结构:

c:\sourcedir\index.pdf                not 6-digit dir
c:\sourcedir\000000\index.jpg
c:\sourcedir\000009\index.css         extension not specified
c:\sourcedir\000009\index.html
c:\sourcedir\000009\index.jpg
c:\sourcedir\000009\index.pdf
c:\sourcedir\000009\index.txt         extension not specified
c:\sourcedir\010+39\index.txt         not 6-digit dir
c:\sourcedir\12345\index.jpg          not 6-digit dir
c:\sourcedir\1234567\index.jpg        not 6-digit dir
c:\sourcedir\123x56\index.jpg
c:\sourcedir\50000-0000\index.jpg     not 6-digit dir
c:\sourcedir\5000000000\index.jpg     not 6-digit dir
c:\sourcedir\999-99\index.jpg         not 6-digit dir
c:\sourcedir\999999\index.jpg
c:\sourcedir\a\index.jpg              not 6-digit dir
c:\sourcedir\yellow\index.jpg         not 6-digit dir

结果:

MOVE "c:\sourcedir\000000\index.jpg" "c:\destdir\000000.jpg"
MOVE "c:\sourcedir\000009\index.html" "c:\destdir\000009.html"
MOVE "c:\sourcedir\000009\index.jpg" "c:\destdir\000009.jpg"
MOVE "c:\sourcedir\000009\index.pdf" "c:\destdir\000009.pdf"
MOVE "c:\sourcedir\999999\index.jpg" "c:\destdir\999999.jpg"